اثر پروانه ای

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

اثر پروانه ای

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

اثر پروانه ای

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

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

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

نوع داده float

نوع ممیز شناور 32 بیتی که معادل آن در دات نت System.Single است و دقت آن تا 7 رقم است.

بصورت پیش فرض در یک انتساب، عدد سمت راست بصورت double تفسیر می شود. پس برای مقداردهی اولیه به پسوند f یا F بعد از عدد سمت راست انتساب نیاز است:

float x=3.5f;

که درغیر اینصورت با خطای زمان کامپایل مواجه خواهیم شد.

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

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

یک عبارت ممیزشناور می تواند شامل مجموعه مقادیر زیر باشد:

  • صفر مثبت و منفی
  • بی نهایت مثبت و منفی
  • مقدار "عددی نیست" یا NaN که کوتاه شده عبارت Not-a-Number است.
  • مجموعه متناهی از مقادیر غیر صفر

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

کلمه کلیدی fixed

باسلام!


دستور fixed از اینکه GC (آشغال جمع کن یا Garbage Collector) یک متغیر جابجا شدنی را منتقل کند، جلوگیریی می کند. دستور fixed فقط در زمینه(context) برنامه نویسی مدیریت نشده مجاز است.

دستور fixed همچنین می تواند برای ساختن بافرهای با اندازه ثابت مورد استفاده قرار می گیرد. این دستور یک اشاره گر به متغیر مدیریت شده می سازد و آن متغیر را در حین اجرای دستور ثابت می کند. بدون fixed ، اشاره گرهای به متغیرهای مدیریت شده قابل انتقال، کاربرد کمی دارد، چون GC می تواند بطور پیش بینی نشده متغیر را جابجا کند. کامپایلر #C فقط اجازه واگذار کردن اشاره گر به متغیر مدیریت شده را در دستور fixed میدهد.

بعد از اجرای کد داخل دستور fixed هر متغیر پین شده (غیرقابل جابجایی)، Unpin می شود و هدف GC قرار می گیرد. بنابراین بیرون دستور fixed به آنها اشاره نکنید. اشاره گرهایی که در دستور fixed مقداردهی اولیه شده اند قابل اصلاح نیستند.

در روش مدیریت نشده، می توان حافظه پشته را که مورد هدف GC قرار نمی گیرد را اختصاص داد؛ و بنابراین نیازی به pin شدن ندارد.

unsafe static void Test(){
    Poin pt=new Point();
    fixed(int* p=&pt.x){
        *p=1;
    }
}

در مورد دستور unsafe بعدا توضیح خواهم داد.

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

بلوک فاینالی برای پاکسازی هرگونه منابع اختصاص یافته در بلوک try مفید است. همچنین اجرای هرگونه کدی که باید حتما" اجرا شود، حتی اگر استتثنایی وجود داشته باشد. کنترل اجرای برنامه همیشه به بلوک finally تحویل داده می شود، صرف نظر از اینکه بلوک try چگونه پایان می پذیرد.

از آنجایی که بلوک catch برای مدیریت خطاهایی است که در یک بلوک دستور اتفاق می افتند، finally تضمین می کند که بلوکی از دستورها فارغ از اینکه بلوک try قبلی چطور تمام شده (باخطا یا بی خطا)، اجرا شود.


try{
    Commands List
}catch(Exception1 e1){
    Commands List
}catch(Exception2 e2){
    Commands List
}catch(ExceptionN eN){
    Commands List
}finally{
    Commands List
}


#c همچنین دستور using را که املای (syntax) راحتری نسبت به try-finally دارد، ارائه می دهد.

در مورد کلیدواژه using بعدا توضیح خواهم داد.

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

به دو صورت استفاده می شود:

  • عملگر (Operator)
  • لیترال (ثابت بدون نام)

اگر بصورت عملگر استفاده شود، مقدار بولی true را برای اینکه نشان دهد که عملوند false است بر می گرداند و درغیر اینصورت true برمی گرداند.

قبل از C# 2.0 عملگر true و false برای ساختن نوع های مقداری تهی پذیر (nullable) کاربر-تعریف که با نوع هایی همچون SqlBool سازگار بود استفاده می شد. هرچند زبان سی شارپ امروزه از نوع های مقداری تهی پذیر پشتیبانی می کند و هرگاه مقدور باشد، باید از آنها بجای overload کردن عملگرهای true و false استفاده کرد.

بوسیله Boolean های تهی پذیر عبارت a != b لزوما برابر (a == b)! نیست؛ زیرا یک یا هردو مقدار ممکن است null باشند. شما مجبورید هردو عملگر true و false را جداگانه بازنویسی (overload) کنید تا با مقادیر null در عبارت ها درست رفتار شود.

اگر در یک کلاس عملگر false را overload کنیم باید حتما عملگر true را هم بازنویسی (overload) کنیم.

کلمات کلیدی true یا false را درحالت لیترال بصورت زیر استفاده می شوند:

bool a=true;
Console.WriteLine(a ? "Yes" : "No");
  • غلامعلی حسینی بهجانی
  • ۲
  • ۰

اینجا صدای آهنگهای پاپ لس آنجلسی و غرب زده آن قدر بلند است که فریادهای «حاج مهدی باکری» به گوش نمی رسد!!!
اینجا همه «حاج ابراهیم همت» را با اتوبان همت می شناسند!!!
اینجا بر دیوارهای شهر روی عکس شهید ، پوستر تبلیغاتی می چسبانند!!!
اینجا نام شهید را برای اینکه بچه ها خشونت طلب و جنگ طلب بار نیایند از کوچه ها برداشته و نام نگین و جاوید می گذارند!!!
اینجا .......... ایران قرن 21 است!!!
اینجا ستارگان درخشان هالیوود آنقدر زیاد شده اند که دیگر کسی ستارگان پرفروغ کربلای ایران را نمی بیند!!!
اینجا دیگر شهدا زنده نیستند و در پیچ و خم های عصر ارتباطات، به خاک سپرده شده اند
اینجا دیگر کسی نمی خواهد گمنام بماند، همه به دنبال کسب نام هستند
اینجا جانبازان موجی را از اجتماع دور نگه می دارند تا آسیبی به افکار عمومی نرسانند
اینجاخرمشهر دیگر خونین شهر نیست، خرمشهر دیگر 36 میلیون جمعیت ندارد!!!
............... اینجا ایران قرن 21 است!!!
اینجا کسی نمی داند، مهدی باکری در وصیت نامه خود از خدا خواسته بود جسدش برنگردد و تکه ای از زمین را اشغال نکند!!!
اینجا دشمن در خانه های ماست، دیگر کسی حاضر به نبرد با دشمن نیست
اینجا در پناه میز هستیم، دیگر کسی پشت خاکریز پناه نمی گیرد
اینجاجانباز شیمیایی، به خاطر نداشتن پول، در بیمارستان پذیرش نمی شود و شهد شهادت می نوشد
اینجا کسی نمی داند، شب عملیات خیبر حاج مهدی باکری، برادرش حمید باکری را جاگذاشت و رفت
اینجاکسی نمی داند، مهدی زین الدین، رتبه چهار کنکور سراسری را داشت
اینجاکسی نمی داند، تکه های پیکر محمد نوبخت را درون گونی برای خانواده اش فرستاده بودند
اینجادعای عهد را فراموش کرده ایم، زمان ندبه و سمات را گم کرده ایم
اینجادیگر کسی، احترامی برای چفیه شهدا قایل نیست
اینجاکسی موهای سفید آقا رو نمیبینه


منبع: افسران: ghrib

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

اصلاحگر extern

اصلاحگر extern برای تعریف یک متد که پیاده سازی آن بیرونی است استفاده می شود. یک استفاده عمومی از extern به همراه صفت DllImport است، وقتی در حال استفاده از سرویس های Interop برای تولید کد های مدیریت نشده هستیم. در این حالت متد باید بصورت static تعریف شود. مانند مثال زیر:

[DllImport("avifil32.dll")]
Private static extern void AVIFileInit();

کلمه کلیدی extern همچنین یک نام مستعار اسمبلی بیرونی تعریف می کند که توانایی ارجاع نسخه های مختلف از یک جزء (Component) یکسان از یک اسمبلی یکسان را می دهد.

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

کلیدواژه explicit

باسلام!

بوسیله این کلمه کلیدی می توانیم برای کلاس خود یک عملگر قالب ریزی (Cast) صریح بسازیم.

روش تعریف:

public static explicit operator Celsius(Farenheit f){
     return new Celsius((5.0f / 9.0f)*(f.degrees - 32));
}


روش استفاده:

Farenheit f=new Farenheit(100.0f);
Console.WriteLine(f.degrees.ToString());
Celsius s=(Celsius)f;
Console.WriteLine(s.degrees.ToString());


بوسیله کلیدواژه explicit می توان برنامه را طوری نوشت که بتوان یک نوع مقداری را به یک نوع مرجع تبدیل کرد و یا برعکس.

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

این مطلب رو با یک مثال شروع می کنم:

enum E:byte{sat,sun=2,mon,tue=8};

نوع پیش فرض در enum نوع int است ولی می توان شبیه مثال بالا نوع های دیگر را به غیر از char به آن اختصاص داد.

با صفت FlagsAttribute می توان کارکرد enum را به طرز جالبی تغییر داد:

[FlagsAttribute]
enum E{sat=0,sun=1,mon=2,tue=4};
for(int i=0;i<4;i++){
Console.WriteLine(((E)i).ToString());
}

جالب اینجاست که هرجا که مقدار معادل متغیرشمارنده حلقه (i) در enum وجود نداشته باشد، ثابت های دیگر را طوری با هم ترکیب می کند تا آن مقدار بدست بیاید. البته باید دقت شود که حتما شماره گذاری عناصر enum توانی از 2 باشد. و از صفت FlagsAttribute قبل از تعریف نوع شمارشی (enum) استفاده شود.

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

کلیدواژه delegate

سلام!

امروز قصد دارم درمورد کلمه کلیدی delegate صحبت کنم.


تعریف وکیل (delegate) شبیه امضای متد است. یک مقدار برگشتی و هر تعداد پارامتر از هر نوع دارد:

public delegate void TestDelegate(string Message);

delegate یک نوع مرجع است که می تواند برای کپسوله کردن یک متد با نام یا بی نام استفاده شود. delegate ها شبیه اشاره گرها تابع در زبان برنامه نویسی ++c هستند.


نکات:

  • delegate ها زیربنای event ها هستند.
  • یک وکیل می تواند با انتسابش به یک متد با نام یا بی نام نمونه سازی شود.
  • یک نماینده حتما باید با یک متد یا عبارت لامبدا که دارای نوع خروجی و پارامترهای ورودی سازگار است نمونه سازی شود. برای استفاده وکیل با متد بی نام، delegate و کد منتسب به آن، باهم تعریف می شوند.

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

کلیدواژه default

کلمه کلیدی default در زبان برنامه نویسی #C عمدتا" به دوشکل استفاده می شود:

  1. در بیان switch (بیان معادل کلمه انگلیسی statement است)
  2. در کلاس های Generic (در مورد این نوع کلاس ها انشاءالله در پست های بعدی مفصل صحبت خواهم کرد. اما فعلا بطور خلاصه می تونم بگم که نوعی کلاس هستند که نوع داده ای که قرار است کلاس با آن کار کند را در زمان نمونه سازی آن مشخص می کنیم. مثلا" <MyClass<int )

این کلیدواژه اگر در بیان switch استفاده شود، مجموعه دستورالعمل هایی را، در صورت نادرست بودن عبارات case قبلی اجرا می کند.

اما بحث من در این پست بیشتر سر استفاده از کلمه کلید default در کلاس ها و متدهای جامع (Generic) است:

یک نکته که در این بحث بوجود می آید این است که چگونه یک مقدار پیش فرض را به یک نوع T پارامتری شده اختصاص دهیم، درحالی که گزینه های زیر را در آینده نمیدانیم:

  1. آیا T نوع مرجع است یا نوع مقداری (Value type or Reference type)
  2. اگر T از نوع مقداری است، آیا مقدار عددی خواهد داشت یا struct (چون نوع struct دز زبان سی شارپ در رده ی نوع های مقداری قرار میگیرد)

فرضا" متغر t از نوع T  پارامتری شده داده شده باشد، عبارت t=null فقط وقتی درست است که t از نوع مرجع باشد و t=0 فقط برای نوع عددی کار می کند و نه برای struct ها.

اما تا اینجا همه مقدمه بود!

راه حل استفاده از کلیدواژه default است که برای نوع های مرجع null برمیگرداند و صفر را برای نوع عددی و همچنین برای نوع struct هر کدام از اعضای آنرا بسته به نوع عددی یا مرجع بودن با صفر یا null برمیگرداند. در صورتی که نوع عددی nullable باشد، کلیدواژه default،

 System.Nullable<T> 

را که مثل هر struct دیگری مقدار دهی شده را برمیگرداند.

مثال زیر از نحوه استفاده از این کلمه کلیدی را در کدهای جامع (Generic) نشان می دهد:

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