اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

برنامه نویسی حرفه ای کامپیوتر به زبان سی شارپ - لیست کامل کلمات کلیدی در ʚĭɞ - ßữʈʨɾflỵ ⓔⓕⓕⓔⓒⓣ

اثر پروانه ای

اثر پروانه‌ای نام پدیده‌ای است که به دلیل حساسیت سیستم‌های آشوب‌ناک به شرایط اولیه ایجاد می‌شود. این پدیده به این اشاره می‌کند که تغییری کوچک در یک سیستم آشوب‌ناک چون جو سیارهٔ زمین (مثلاً بال‌زدن پروانه) می‌تواند باعث تغییرات شدید (وقوع توفان در کشوری دیگر) در آینده شود.

ایده‌ٔ این‌که پروانه‌ای می‌تواند باعث تغییری آشوبی شود نخستین بار در ۱۹۵۲ در داستان کوتاهی به نام آوای تندر اثر ری بردبری مطرح شد. عبارت «اثر پروانه ای» هم در ۱۹۶۱ در پی مقاله‌ای از ادوارد لورنتس به وجود آمد. وی در صد و سی و نهمین اجلاس ای‌ای‌ای‌اس در سال ۱۹۷۲ مقاله‌ای با این عنوان ارائه داد که «آیا بال‌زدن پروانه‌ای در برزیل می‌تواند باعث ایجاد تندباد در تکزاس شود؟»

آخرین نظرات
  • ۱۳ بهمن ۰۱، ۱۵:۳۱ - حسنا سادات و سما سادات
    عالی

۱۰۷ مطلب با کلمه‌ی کلیدی «programming» ثبت شده است

  • ۱
  • ۰

رویداد ها ، به یک کلاس یا شیئ این امکان را می دهند که درصورت اتفاق چیزی دلخواه ، کلاس ها یا اشیاء دیگر را مطلع کنند. به کلاسی که رویداد را می فرستد (یا برپا می کند) ، ناشر (publisher) می گویند و به کلاس هایی که رویداد را دریافت (مدیریت/handle) می کنند، متعهد (subscriber/اشتراک گیرنده) می گویند.

در یک برنامه ویندوزی یا تحت وب نمونه که با #C نوشته شده است، شما توسط کنترل هایی مثل button و یا listbox متعهد رویدادهای برپاشده می شوید. شما می توانید با استفاده از IDE (محیط توسعه جامع) Visual C# تمام رویدادهایی که یک کنترل منتشر می کند را ببینید و هر کدام از آنها را که خواستید ، برای مدیریت (handle) انتخاب کنید. IDE بطورت خودکار یک متد خالی مدیریت کننده رویداد و کد تعهد به رویداد را اضافه می کند. برای اطلاعات بیشتر به "راهنمای چگونگی اشتراک گیری و لغو اشتراک از رویدادها" مراجعه کنید.

بررسی رویدادها

رویدادها دارای خواص زیر می باشند:

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

روند زیر چگونگی افزودن رویدادهایی که از الگوی استاندارد دات نت پیروی می کنند را به کلاس ها و ساختارها ، توضیح می دهد. همه رویدادها در کتابخانه کلاس Net Framework. بر پایه وکیل EventHandler می باشند، که بصورت زیر تعریف شده اند:

public delegate void EventHandler(object sender, EventArgs e);

نکته

نسخه 2.0 دات نت فریم وورک یک نسخه جنریک (generic) از این وکیل (delegate) بصورت <EventHandler<TEventArgs معرفی می کند. مثال های زیر چگونگی استفاده از هر دو نسخه را نشان می دهد. هر چند رویدادهای موجود در کلاس هایی که شما تعریف می کنید، می توانند بر پایه هر وکیل معتبری باشند؛ حتی وکیل هایی که یک مقدار را برگشت می دهند، عموما" پیشنهاد می شود که با استفاده از EventHandler ، رویداد هایتان را روی الگوی دات نت فریم وورک ، پایه گزاری کنید. بصورتی که در مثال زیر نشان داده شده است.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلمه کلیدی event

کلمه کلیدی event برای اعلان یک کلاس منتشر کننده رویداد استفاده می شود.

مثال

مثال زیر چگونگی اعلان و برپا کردن یک رویداد که از EventHandler به عنوان نوع وکالتی (delegate type) اساسی اش استفاده می کند. برای مشاهده مثال کاملی از چگونگی استفاده از نوع وکالتی جنریک <EventHandler<TEventArgs و چگونگی تصویب یک رویداد و ساختن یک متد مدیریت کننده رویداد، به راهنمای انتشار رویدادها ، مطابق Net Framework. مراجعه کنید.

public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    public String Text {get; private set;} // readonly
}
public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

رویداد ها نوعی خاص از وکیل چندپخشی هستند که فقط از داخل کلاس یا ساختار (struct)ی که اعلان شده اند (کلاس منتشر کننده) ، احضار می شوند. اگر کلاس ها یا ساختارهای دیگر در رویداد مشترک شوند، وقتی که کلاس ناشر ، رویداد را برپا کند، متدهای مدیریت رویداد آنها فراخوانی خواهند شد. برای اطلاعات بیشتر به رویدادها (راهنمای برنامه نویسی #C) و وکیل ها (راهنمای برنامه نویسی #C) مراجعه کنید.

رویدادها را می توان با public، private، protected، internal یا protected internal علامتگذاری کرد. این اصلاحگرهای دسترسی، چگونگی دسترسی کاربران کلاس ، به رویداد را تعریف می کنند.

کلیدواژه ها و رویدادها

کلمات کلیدی زیر روی رویدادها اعمال می شوند.

  • static : اگر هیچ نمونه ای از کلاس موجود نباشد، رویداد را برای فراخواننده گان در دسترس قرار می دهد. (بدون نمونه سازی از کلاس به رویداد دسترسی داریم).
  • virtual : به کلاس های مشتق شده اجازه می دهد تا با استفاده از کلمه کلیدی override رفتار رویداد را بازنویسی کنند.
  • sealed : رویداد را به عنوان مهروموم شده اعلام کرده و اجازه رونویسی نداریم. (برای کلاس های مشتق شده تعیین می کند که این رویداد، دیگر مجازی نیست).
  • abstract : کامپایلر بلوک های دستیابی کننده رویداد add و remove را تولید نمی کند، بنابراین کلاس مشتق شده باید پیاده سازی خودش را برای این دستیابی کننده ها ارائه کند.

یک رویداد ممکن است با کلمه کلیدی static به عنوان یک رویداد ایستا اعلان شود؛ این کار، رویداد را برای همیشه در دسترس فراخواننده گان قرار می دهد، حتی اگر هیچ نمونه ای از کلاس موجود نباشد.

یک رویداد می تواند به عنوان یک رویداد مجازی (virtual) علامتگذاری شود؛ که این امکان را به کلاس های مشتق شده می دهد تا رفتار رویداد را با استفاده از کلیدواژه override بازنویسی کنند. برای اطلاعات بیشتر "ارث بری (آموزش برنامه نویسی #C) را ببینید. رویدادی که رخداد مجازی را بازنویسی می کند، همچینی می تواند با sealed علامت گذاری شود؛ با این کار به کلاس های مشتق شده می گوییم که این رویداد دیگر مجازی نیست و نمی توان آنرا بازنویسی کرد. در پایان، یک رویداد می تواند بصورت abstract اعلان شود، که بدین معنی است که کامپایلر بلوک های دسترسی کننده ی رویداد add و remove را تولید نخواهد کرد. بنابراین کلاس های مشتق شده باید پیاده سازی خودشان را برای این بلوک ها ارائه دهند.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلیدواژه enum

کلمه کلیدی enum برای اعلان مجموعه شمارشی (enumeration) استفاده می شود. enumeration یک نوع متمایز شامل مجموعه ای نامدار از ثابت ها است که به آنها لیست شمارشی می گویند.

معمولا" بهترین راه، اعلان enum مستقیما" درون namespace است، در نتیجه همه کلاس های داخل namespace می توانند بصورت مساوی به آن دسترسی داشته باشند. هرچند، یک enum می تواند بصورت تودرتو ، درون یک کلاس یا ساختار (struct) قرار گیرد.

بصورت پیش فرض، اولین enumerator (اعضای enum) مقدار صفر دارد و بقیه اعضا مقدارشان بصورت متوالی، یکی یکی افزایش پیدا می کند.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

در این لیست شمارشی، Sat مقدار صفر دارد، Sun مقدار 1 دارد، Mon مقدار 2 دارد و الی آخر. enumerator ها می توانند برای رونویسی مقدار پیش فرضشان، مقدار دهی اولیه شوند. برای مثال:

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

بیان if-else

بیان if ، اجرای یک بیان یا بلوکی از بیان ها را بر اساس مقدار یک عبارت بولی ، انتخاب می کند. در مثال زیر متغیر بولی result با true مقداردهی ، سپس در بیان if بررسی شده است. خروجی "The variable is set to true" است.

bool result = true;

if (result == true)
{
    Console.WriteLine("The variable is set to true.");
}
else
{
    Console.WriteLine("The variable is set to false.");
}

اگر عبارت ارزیابی شده در داخل پرانتز درست باشد، آنگاه بیان 

Console.WriteLine("The variable is set to true.");

اجرا خواهد شد. بعد از اجرای بیان if ، روند اجرای برنامه به بیان بعدی منتقل می شود. در این مثال else اجرا نشده است.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلمه کلیدی double

کلمه کلیدی double بر یک نوع ساده با قابلیت ذخیره مقادیر ممیز-شناور 64-بیتی دلالت دارد. دقت و محدوده تقریبی نوع double بصورت زیر است:

  • نوع: double
  • محدوده تقریبی:

    ±5.0 × 10−324 to ±1.7 × 10308

  • دقت: 16-15 رقم
  • نوع دات نتی: System.Double

لیترال ها

بطور پیش فرض، با یک لیترال عددی حقیقی که در سمت راست عبارت انتساب قرار گرفته باشد به عنوان double رفتار می شود. اما ، اگر می خواهید با یک عدد صحیح به عنوان double رفتار شود، از پسوند d یا D استفاده کنید. برای مثال:

double x = 3D;

تبدیلات

شما می توانید نوع های عددی صحیح و نوع های ممیز-شناور را در یک عبارت با هم ترکیب کنید. در چنین موردی ، نوع های صحیح به نوع های ممیز-شناور تبدیل می شوند. ارزیابی عبارت، بر اساس قوانین زیر انجام می شود:

  • اگر یکی از نوع های ممیز-شناور double باشد،عبارت به صورت double ارزیابی می شود. در عبارت های بولی بصورت bool ارزیابی می شود.
  • اگر هیچ نوع double ی در عبارت وجود نداشته باشد، به صورت float ارزیابی خواهد شد. در عبارت های بولی بصورت bool ارزیابی می شود.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

کلمه کلیدی do

بیان do تا زمانی که عبارت مشخص شده برایش به false ارزیابی شود، یک بیان یا بلوکی از بیان ها را که در {} قرار دارند را ،  مکررا" اجرا می کند.

مثال

در مثال زیر تا زمانی که متغیر x کوچکتر از 5 باشد، حلقه do-while اجرا می شود.

public class TestDoWhile 
{
    public static void Main () 
    {
        int x = 0;
        do 
        {
            Console.WriteLine(x);
            x++;
        } while (x < 5);
    }
}
/*
    Output:
    0
    1
    2
    3
    4
*/

برخلاف بیان while، حلقه do-while یک بار قبل از اینکه عبارت شرطی بررسی شود به اجرا در می آید.

بوسیله بیان break ، می توانید در هر نقطه ای از بلوک do-while از حلقه خارج شوید. شما می توانید با بیان continue ، مستقیما به بیان ارزیابی عبارت while بروید؛ اگر عبارت به true ارزیابی شود، روند اجرای برنامه از اولین بیان در حلقه، ادامه پیدا خواهد کرد. اگر عبارت به false ارزیابی شود، روند اجرای برنامه از اولین بیان بعد از حلقه do-while ادامه داده می شود.

حلقه do-while توسط بیان های goto ، return یا throw نیز می تواند به پایان برسد.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

جدول زیر تبدیلات عددی ضمنی از پیش تعریف شده را نشان می دهد. تبدیلات ضمنی ممکن است در بسیاری مواقع ، از جمله فراخوانی متد و بیان های انتساب ، اتفاق بیافتد.


از به
sbyte short, int, long, float, double, یا decimal
byte short, ushort, int, uint, long, ulong, float, double, یا decimal
short int, long, float, double, یا decimal
ushort int, uint, long, ulong, float, double, یا decimal
int long, float, double, یا decimal
uint long, ulong, float, double, یا decimal
long float, double, یا decimal
char ushort, int, uint, long, ulong, float, double, یا decimal
float double
ulong float, double, یا decimal


ملاحظات

  • تبدیلات از int و uint یا long به float و از long به double ممکن است باعث از دست رفتن دقت شود، اما به مقدار ضرری وارد نمی شود.
  • هیچ تبدیل ضمنی ای به نوع char وجود ندارد.
  • هیچ تبدیل ضمنی ای بین نوع های ممیز-شناور و decimal وجود ندارد.
  • یک عبارت ثابت از نوع int می تواند به sbyte ، byte ، short ، ushort ، uint یا ulong تبدیل شود، مقدار تعیین شده عبارت ثابت در محدوده نوع مقصد می باشد.

  • غلامعلی حسینی بهجانی
  • ۱
  • ۰

نوع داده ای decimal

کلیدواژه decimal به یک نوع داده ای 128-بیتی اشاره دارد. در مقایسه با نوع های ممیز-شناور، نوع decimal دقت بیشتر و محدوده کمتری دارد، که آنرا برای محاسبات مالی و پولی مناسب کرده است. 

محدوده تقریبی و دقت نوع decimal در زیر آمده است:

  • نوع: decimal
  • محدوده تقریبی:

    (-7.9 x 1028 to 7.9 x 1028) / (100 to 28)

  • دقت: 29-28 رقم معنادار
  • نوع دات نتی: System.Decimal

    لیترال ها

    اگر شما می خواهید یک لیترال عددی حقیقی داشته باشید که با آن مانند decimal رفتار شود، از پسوند m یا M استفاده کنید، برای مثال:

    decimal myMoney = 300.5m;

    بدون پسوند m ، با عدد مانند double رفتار شده و تولید یک خطای کامپایل می نماید.

    • غلامعلی حسینی بهجانی
    • ۱
    • ۰

    کلمه کلیدی continue

    بیان continue روند اجرای برنامه را به دور بعدی حلقه تکراری که در آن قرار دارد هدایت می کند.

    مثال

    در این مثال، یک شمارنده برای شمارش از 1 تا 10 مقداردهی اولیه شده است. با استفاده از بیان continue که به عبارت (i<9) متصل شده، بیان های ما بین continue و آخر بدنه for از قلم می افتند.

    class ContinueTest
    {
        static void Main()
        {
            for (int i = 1; i <= 10; i++)
            {
                if (i < 9)
                {
                    continue;
                }
                Console.WriteLine(i);
            }
    
            // Keep the console open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    /*
    Output:
    9
    10
    */
    

    • غلامعلی حسینی بهجانی