اثر پروانه ای

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

مشخصات بلاگ
اثر پروانه ای

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

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

آخرین نظرات
  • ۱۱ بهمن ۹۵، ۱۷:۱۸ - فاروق کریمی زاده
    خوب بود.
اثر پروانه ای

۲۵ مطلب با موضوع «برنامه نویسی :: #C :: بیان (statement)» ثبت شده است

عبارت های لامبدا (Lambda Expressions)

سی شارپ 2.0 متدهای بی‌نام را معرفی کرد، که تا اینجا این گونه از متدها را بررسی کردیم. هرچند املاء متدهای بی‌نام تا حدودی طولانی بوده و نیاز به اطلاعاتی دارد که خود کامپایلر از آنها مطلع است. بجای اینکه مجبور باشید این اطلاعات تکراری را الحاق کنید، سی شارپ 3.0 عبارت های لامبدا را معرفی کرده که املاء و نگارش متدهای بی‌نام را کاهش داده است. شاید بخواهید بجای استفاده از متدهای بی‌نام از عبارت های لامبدا استفاده کنید. در حقیقت، اگر عبارت های لامبدا زودتر معرفی شده بودند، دیگر هرگز متدهای بی‌نام وجود نداشتند.

در نگارش متدهای بی‌نام، کلمه کلیدی delegate مازاد بر احتیاج است؛ به این علت که خود کامپایلر می بیند که شما درحال انتساب متد به delegate هستید. شما می توانید با انجام کارهای زیر، بسادگی، یک متد بی‌نام را به یک عبارت لامبدا تبدیل کنید:

  • کلیدواژه delegate را حذف کنید.
  • عملگر لامبدا ( <= ) را مابین لیست پارامترها و بدنه متد بی نام قرار دهید. عملگر لامبدا بصورت "می رود به" (goes to) خوانده می‌شود.

تکه کد زیر این تبدیل را نشان می دهد. خط اول یک متد بی نام را که به متغیر del انتساب داده شده را نشان می دهد. خط دوم همان متد بی نام را بعد از آنکه به عبارت لامبدا تبدیل شده را نشان می دهد که به متغیر le1 منتسب شده است.

بیان while یک بیان (دستور) یا بلوکی از بیان ها را تا زمانی که عبارت تعیین شده اش به false ارزیابی شود، اجرا می کند.

مثال

    class WhileTest 
    {
        static void Main() 
        {
            int n = 1;
            while (n < 6) 
            {
                Console.WriteLine("Current value of n is {0}", n);
                n++;
            }
        }
    }
    /*
        Output:
        Current value of n is 1
        Current value of n is 2
        Current value of n is 3
        Current value of n is 4
        Current value of n is 5
     */

یک املاء (syntax) راحت که درستی استفاده از اشیاء IDisposable را تضمین میکند را ارائه می دهد.

مثال

مثال زیر چگونگی استفاده از بیان using را نشان می دهد.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

ملاحظات

File و Font نمونه هایی از نوع های مدیریت شده (managed) هستند که منابع مدیریت نشده (unmanaged) را دستیابی می کنند (در این مورد دستگیره های فایل و زمینه ها دستگاه (دستگاهی که قرار است فونت در آنجا به نمایش در بیاید)) انواع گوناگون دیگری از منابع مدیریت نشده و نوع های کتابخانه کلاسی که آنها را کپسوله می کنند وجود دارد. همه ی چنین نوع هایی باید رابط IDisposable را پیاده سازی کنند.

رهنمون using دو کاربرد دارد:

  • اجازه می دهد تا از نوع هایی که در فضای نام های دیگری تعریف شده اند به گونه ای استفاده کنیم که نیاز به نوشتن نام کامل آنها نباشد:
    using System.Text;
  • برای ساختن یک نام مستعار برای یک فضای نام یا یک نوع؛ که به آن "using رهنمون نام مستعار" می گویند.
    using Project = PC.MyCompany.Project;

کلمه کلیدی using همچنین برای ساختن "بیان using" استفاده می شود که کمک می کند مطمئن شویم اشیاء IDisposable مانند فایل ها و فونت ها بدرستی مدیریت می شوند. برای اطلاعات بیشتر بیان using را ببینید.

برای بدست آوردن شیئ System.Type مربوط به یک نوع کاربرد دارد. یک عبارت typeof به شکل زیر است:

System.Type type = typeof(int);

ملاحظات

برای بدست آوردن نوع زمان-اجرای یک عبارت ، می توانید از متد دات نتی GetType بصورت زیر استفاده کنید:

int i = 0;
System.Type type = i.GetType();

عملگر typeof را نمی توان overload کرد.

عملگر typeof همچنین می تواند در نوع های جنریک باز مورد استفاده قرار گیرد. نوع هایی که دارای بیش از یک پارامتر نوع هستند، باید تعداد متناسبی وریگول (کاما) در خصوصیتشان باشند. مثال زیر چگونگی تعیین اینکه آیا نوع خروجی یک متد از نوع جنریک IEnumerable است یا نه را نشان می دهد. فرض کنید این متد نمونه ای از یک نوع MethodInfo باشد:

بیان throw برای ابلاغ اتفاق یک موقعیت غیرعادی (exception) در حین اجرای برنامه ، استفاده می شود.

ملاحظات

خطای پرتاب شده ، شیئی است که از کلاس System.Exception مشتق شده است. برای مثال:

class MyException : System.Exception {}
// ...
throw new MyException();

معمولا" بیان throw به همراه بیان های try-catch یا try-finally مورد استفاده قرار می گیرد.

public class ThrowTest2
{
    static int GetNumber(int index)
    {
       int[] nums = { 300, 600, 900 };
       if (index > nums.Length)
       {
           throw new IndexOutOfRangeException();
       }
       return nums[index];

    }
    static void Main() 
    {
       int result = GetNumber(3);
    }
}
    /*
        Output:
        The System.IndexOutOfRangeException exception occurs.
    */

در نوع های مدیریت نشده، برای بدست آوردن اندازه آن نوع بر حسب بایت استفاده می شود. نوع های مدیریت نشده شامل نوع های توکار (built-in) که در جدولی که بعدا" می آید لیست شده اند و همچنین نوع های زیر هستند:

  • نوع های شمارشی (Enum types)
  • نوع های اشاره گر (Pointer types)
  • ساختارهای کاربر-تعریف که حاوی هیچ فیلد یا پراپرتی نوع مرجع نباشد

مثال زیر چگونگی بدست آوردن اندازه یک نوع int را نشان می دهد:

// Constant value 4:
int intSize = sizeof(int); 

ملاحظات

از نسخه 2.0 سی شارپ به بعد، اعمال sizeof روی نوع های توکار ، دیگر نیازی به استفاده از شیوه unsafe ندارد.

عملگر sizeof را نمی توان overload کرد. مقدار برگشتی توسط عملگر sizeof از نوع int است. جدول زیر مقادیر ثابتی که جایگزین عبارت sizeof با عملوندهای ورودی از نوع های خاص را نشان می دهد:

کلمه کلیدی sbyte نشاندهنده یک نوع صحیح است که مقادیر را طبق شرایط زیر ذخیره می کند.

  • نوع: sbyte
  • محدوده: 128- تا 127
  • اندازه: صحیح علامت دار 8-بیتی
  • نوع دات نتی: System.SByte

لیترال ها

شما می توانید متغیرهای sbyte را بصورت زیر اعلان و مقداردهی اولیه کنید.

sbyte sByte1 = 127;

در اعلان بالا ، لیترال صحیح 127 بطور ضمنی از int به sbyte تبدیل شده است. اگر لیترال صحیح از محدوده sbyte تجاوز کند، یک خطای کامپایل رخ می دهد.

درهنگام استفاده از متد های overload شده باید از عملگر قالبریز (cast) استفاده شود. برای مثال، متدهای overload شده زیر را که از پارامترهای sbyte و int استفاده می کنند را در نظر بگیرید:

public static void SampleMethod(int i) {}
public static void SampleMethod(sbyte b) {}

استفاده از قالبریز sbyte تضمین می کند که نوع درست فراخوانی خواهد شد. برای مثال:

// Calling the method with the int parameter:
SampleMethod(5);
// Calling the method with the sbyte parameter:
SampleMethod((sbyte)5);

بیان return روند اجرای متدی را که در آن قرار گرفته را متوقف کرده و کنترل را به جایی که متد فراخوانی شده بازمی گرداند. این بیان همچنین می تواند یک مقدار اختیاری را بازگرداند. اگر نوع برگشتی متد void باشد، می توان از بیان return صرف نظر کرد.

اگر بیان return داخل یک بلوک try قرار گرفته باشد، قبل از اینکه کنترل به محل فراخوانی متد برگردد، بلوک finally (درصورت وجود) اجرا می شود.

مثال

در مثال زیر، متد()A متغیر area را بصورت مقدار double برگشت می دهد.

class ReturnTest
{
    static double CalculateArea(int r)
    {
        double area = r * r * Math.PI;
        return area;
    }

    static void Main()
    {
        int radius = 5;
        double result = CalculateArea(radius);
        Console.WriteLine("The area is {0:0.00}", result);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: The area is 78.54

بیان goto روند اجرای برنامه را مستقیما" به یک بیان برچسب خورده منتقل می کند.

یک استفاده رایج از goto ، انتقال روند اجرای برنامه به برچسب default یا یک برچسب case خاص در بیان switch می باشد.

بیان goto همچنین برای بیرون آمدن از حلقه های تودرتوی عمیق کاربرد دارد.

مثال

مثال زیر طرز استفاده از goto در بیان switch را توضیح می دهد.