سلام
یک سری برنامه نویس های یکسری متغیر میزارن که با _ شروع میشه.چرا؟ دلیل خاصی داره؟ و کلماتی که با 2 نوع کامپایلر بهمون میده.کلمات کلیدی منظورمه که با حرف کوچک و بزرگ میده.کاربردش کی هست و چرا این طوریه؟
Printable View
سلام
یک سری برنامه نویس های یکسری متغیر میزارن که با _ شروع میشه.چرا؟ دلیل خاصی داره؟ و کلماتی که با 2 نوع کامپایلر بهمون میده.کلمات کلیدی منظورمه که با حرف کوچک و بزرگ میده.کاربردش کی هست و چرا این طوریه؟
منظور خاصی وجود نداره معمولا بیشتر در داخل کلاس ها که بخواهند خصوصیاتی برای کلاس تعریف کنند نیاز به متغیرهای محلی هست در اینجا معمولا از علامت _ در ابتدا متغیرها استفاده میشه (کاربر هم بصورت مستقیم با این متغیر کار نمی کنه و فقط Property مورد نظر بصورت داخلی از آن استفاده می کند) . فقط همین و منظور دیگه ای در کار نیست.
این نوع کلمات کلیدی اصطلاحا آلیاس هم هستند و هیچ فرقی بین اونها در کوچک بودن یا بزرگ بودن حرف اول وجود نداره. البته از حرف بزرگ بیشتر زمانی استفاده میشه که بخواهند با تایپ مورد نظر کار کنند مثلا string و String رو در نظر بگیر برای تعریف متغیرها از اولی و زمانی که با متدهای کلاس استرینگ بخواهند کار کنند از دومی استفاده می کنند مثلا String.Compare یا String.IsNullOrEmpty و سایر متدها
گذاشتن _ در ابتدای متغیر ها چندین معنا دارد، این مطلب کاملا بسته به کامپایلر و حتی برنامه نویس دارد.
بیایید در دو سطح بررسی کنیم:
1- بحث روان خوانی
2- بحث اسمبلر
در بخش روان خوانی همان طور که جناب anvar فرمودند فقط جنبه ی نمایشی دارد و قرار دادن یک _ تنها برای ایجاد درک در متغیر های محلی است. همچنین استفاده از مقادیر با حروف بزرگ (تماما بزرگ) برای مقادیر const استفاده می شود. این روش یک استاندارد را مطرح می کند که همان استاندارد پاسکال هست. به این جمله دقت کنید:
منبع WikiPedia .کد:Microsoft .NET recommends UpperCamelCase (a.k.a. "Pascal Style") for most identifiers. (lowerCamelCase is recommended for parameters and variables) and is a shared convention for the .NET languages. Microsoft further recommends that no type prefix hints (also known as Hungarian notation) are used.Instead of using Hungarian notation it is recommended to end the name with the base class' name; LoginButton instead of LoginBtn.
برای شرح کاملا استاندارد نام گذاری ببینید: (بسیار مفید است)
برای کسب اطلاعات بیشتر اینجاها را نیز ببینید.کد:http://msdn.microsoft.com/en-us/library/vstudio/ms229043(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/vstudio/ms229045(v=vs.100).aspx
اما مطلب دیگر در مورد _ این گونه می باشد.(عموما در .net وجود _ به این تعریفی که قصد دارم شرح بدهم نیست اما در C کاملا با این معناست.)کد:http://www.joelonsoftware.com/articles/Wrong.html
http://en.wikipedia.org/wiki/CamelCase
http://geosoft.no/development/cppstyle.html
http://www.oualline.com/style/c03.html
اگر یک متغیر در C درج گردد هنگام کامپایل و تبدیل به اسمبلی با _ دیده خواهد شد یعنی:
و اگر متغیر شما یک _ نیز داشته باشد پس __ در اسمبلی دیده خواهد شد. می تواند روشی برای کمک به تحلیل اسمبلی باشد.کد:me To-> _me
مهندسی معکوس: اگر بخواهیم یکسری تابع یا ماکروی اسمبلی داشته باشیم کافیست تا در هنگام نوشتن اسمبلی یک _ در ابتدای نام label اسمبلی گذاشته تا بتوانیم نام کاملا آن را بدون _ در C داشته باشیم. حال کافیست تا با یک extern به linker اعلام کنیم که متد ما در اسمبلی وجود دارد.
مثال:
و در C بنویسیم:کد:_myLabel:
MOV #FFFFH,AC0
RET
البته این یک استاندارد است اما بازهم بسته به کامپایلر ممکن است این رفتار را نبینید.کد:extern void myLabel();
main()
{
myLabel();
}
موفق باشید.