ASP.NET2005
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

زیان برنامه نویسی d ................................

اذهب الى الأسفل

زیان برنامه نویسی d  ................................ Empty زیان برنامه نویسی d ................................

پست  hamid الخميس ديسمبر 24, 2009 11:20 am

D زبان برنامه نویسی
یک زبان D . یک زبان برنامهسازی سیستمی و کاربردی ھمه منظوره است D ؟ چیست D چشم انداز
ھای سیستم API است اما توانایی نوشتن کدھای قدرتمند و تعامل مستقیم با C++ سطح بالاتر از
به خوبی برای نوشتن برنامهھای متداول و برنامهھای بزرگ چند D. عامل و سخت افزار را حفظ میکند
به آسانی قابل آموختن است ، توانائیھای D . میلیون خطی با تیمھای برنامه نویسی مناسب است
زیادی را برای کمک به برنامه نویس فراھم میکندوبه خوبی برای فناوری پرتکاپوی بھینهسازی کامپایلر
نیست. ھمچنین دارای (interpreter) یک زبان اسکریپتی(متنی) یا دارای مفسر D . مناسب است
ماشین مجازی ، مذھب خاصیا فلسفه برتریجویی نمی باشد. بلکه یک زبان عملی است برای
برنامه نویسان حرفهای که نیاز به انجام سریع و قابل اعتماد پروژه دارند و به کد قابل فھم آسان نیاز
اوج چند دھه تجربه به کارگیری کامپایلرھایی از D . دارند و مسئول عملکرد صحیح برنامه ھستند
از زبانھای دیگر D . زبانھای گوناگون و تلاش برای بنانھادن پروژه ھای بزرگ توسط آن زبانھا است
واقعاً ؟ D الھام میگیرد و آن را با تجربه و کاربرد به معنای واقعی درھم میآمیزد. چرا C++ مخصوصاً
C چرا؟ چه کسی زبان برنامه نویسی دیگری نیاز دارد؟ صنعت نرم افزار راه درازی از زمان اختراع زبان
افزوده شد. اما سازگاربا C تعداد زیادی مفاھیم جدید به زبان C++ تاکنون پیموده است. به وسیله
تلاشھای . C در آن ادامه یافت ، شامل سازگاری با تقریباً تمام ضعفھای طراحی اصلی زبان C گذشته
زیادی برای برطرف ساختن آن ضعفھا تاکنون صورت گرفته است اما در پی حفظ سازگاری با گذشته
دستخوش یک رشد پیوسته خصوصیات جدید شده اند. C++ و C خنثی شده است. در ضمن ھر دوی
این خصوصیات جدید باید به دقت و بدون نیاز به بازنویسی کد قدیمی به ساختار موجود خورانده شود.
استاندارد حدود ٧۵٠ C++ استاندارد تقریباً ۵٠٠ صفحه است و C ؛ نتیجه نھایی بسیار پیچیده است
این است که کامپایلرھای اندکی به طور مؤثر استاندارد را ++C صفحه ! حقیقت شلوغی کامپایلر
گرایش می یابند که در جزایر خاصی از زبان برنامه ++C دست نخورده به کار میگیرند. برنامه نویسان
بسازند و در نظر میگیرند کاربرد بسیار خوب بعضی خصوصیات را در حالی که از دیگر مجموعهھا
اجتناب میکنند . با وجود اینکه کد از یک کامپایلر به کامپایلر دیگر قابل حمل است میتواند مشکل
این است که ++C باشد که از برنامه نویسی به برنامه نویسی دیگر منتقل شود. توانایی بزرگ
میتواند تعداد زیادی سبکھای اصلی برنامهنویسی را پشتیبانی کنند . در کاربرد طولانی مدت سبکھای
دارای اشتراک و متناقض یک مانع و در نتیجه سبب تأخیر ھستند. ناامید کننده است که زبانی چنین
++C قدرتمند ، اعمال پایها ای مانند تغییر اندازه آرایهھا و الحاق رشتهھا را انجام نمیدھد.البته
توانایی برنامه نویسی قدرتمند برای پیاده سازی آرایه ھای قابل تغییر اندازه و رشته ھا را فراھم
اما به ھرحال چنین خصوصیات بنیادی ، بایستی جزء قسمتھای . ( STL میکنند (مانند نوع بردار در
قابل گسترش ، طراحی مجدد و پیادهسازی به یک زبان ساده ، ++C زبان باشد. آیا قدرت و قابلیتھای
وارتگنال (متمایز و مستقل )و کاربردی می باشد؟ آیا تمامی آنھا می تواند داخل بسته ای قرار گیرد که
برای کامپایلرنویسان به آسانی قابل پیادهسازی صحیح باشد و کامپایلرھا را قادر کند که به نحوی کارا ،
کدھای بھینه شده و پرتکاپو ایجاد کند؟ فناوری پیشرفته کامپایلر به نقطهای رسیده است که
خصوصیاتی از زبان که به منظور جبران کردن فناوری ابتدایی کامپایلر وجود دارند ، میتوانند حذف شوند.
باشد ، مثالی ظریفتر ماکروی پیشپردازنده در C در ”Register“ (مثالی ازاین نمونه میتواند واژه کلیدی
است) . ما میتوانیم به فناوری پیشرفتهی بھینه سازی کامپایلر اعتماد کنیم تا دیگر به خصوصیاتی C
از زبان که برای دست یافتن به کیفیت کد قابلقبول (جدای از کامپایلرھای ابتدائی) لازم است نیاز
درنظر دارد که ھزینهھای گسترش نرمافزار را حداقل % ١٠ کاھشدھد توسط افزودن D . نداشته باشیم
خصوصیات بھینهسازی بالابرنده میزان سودمندی و تولید و ھمچنین با تعدیل کردن خصوصیات زبان ، به
منظره ++C/C طوری که اشکالات وقتگیر متداول از ابتدا حذف میشوند. خصوصیات حفظ شده از
و انتقال کد به آن را آسانتر میکند. گذر از D است . این موضوع آموختن ++C و C شبیه D کلی
باید طبیعی حسشود و برنامه نویسمجبور نخواھد بود که یک راه کاملاً جدید D به سوی ++C/C
به این معنا نیست که برنامه نویس به یک ماشین مجازی خاص D انجام کارھا را فراگیرد. استفاده از
وجود ندارد یک D ھیچ ماشین مجازی . Smalltalk زبان اجرا محدود شود مانند ماشین مجازی جاوا یا
به سیستم عامل متصل D . تولید میکند (Link) ھای قابل پیوند Objectfile کامپایلر سرراست است که
گنجانده D مستقیماً در برنامهنویسی ”MAKE“ ابزارھای آشنای متداول مانند . C میشود دقیقاً مانند
ابقا خواھد شد . ھمان املای جبری به کار ++C/C شده است. ١.منظره عمومی و احساس موجود در
C ھم به سبک D خواھد رفت و اغلب عبارات و فرمھای دستورات و طرحبندی عمومی. ٢.برنامهھای
برای چه D . نه شیءگرا) یاترکیبی از ھردو قابل نوشتن است ) ++C (توابع و دادهھا) و ھم در سبک
کسانی مناسب است؟ ١.برنامه نویسانی که به طور مداوم از ابزارھای تجزیه و تحلیل کد استفاده
میکنند تا خطاھا را حتی قبل از کامپایل شدن ازبین ببرند. ٢.افرادی که عمل کامپایل را با بالاترین
سطح ھشدارھا انجام میدھند یا از کامپایلر میخواھند که ھشدارھا را به منزله خطا تلقی کند.
٣.مدیران برنامهنویسی که مجبورند به راھنماییھای سبک برنامهنویسی برای اجتناب از اشکالات
به خاطر ++C اعتماد کنند. ۴.افرادی که براین باورند که وعدهھای سبک شیءگرای C معمول
لذت میبرند اما به خاطر ++C پیچیدهگیھایشبرآورده نمیشود. ۵.برنامهنویسانی که از قدرت بیانگر
نیاز به صرف تلاش زیاد برای اداره حافظه و یافتن اشکالات اشارهگرھا ، ناامید شدهاند. ۶.پروژهھایی که
نیاز به تست ھمراه و تصدیق و تأیید دارند. ٧.برنامهنویسانی که فکر می کنند زبان باید دارای خصوصیات
کافی باشد . برای رفع نیاز دائمی اداره دستی و مستقیم اشارهگرھا. ٨.برنامهنویسان محاسبات
دارای خصوصیات زیادی برای پشتیبانی مستقیم اعمال مورد نیاز برنامه نویسان محاسبات D . عددی
NAN’S میباشد ، مانند پشتیبانی مستقیم از نوع داده مرکب و اعمال تعریف شده برای بینھایت و
از D نه) ٩.بخشتجزیه لغوی و تجزیه نحوی ++C ٩٩ اضافه شد ولی در C (این خصوصیات در استاندارد
یکدیگر در نھایت مجزا ھستند و ھمچنین از تجزیهگر معنایی. این بدین معناست که نوشتن ابزارھای
در سطح عالی آسان است بدون اینکه مجبور به ساختن یک کامپایلر D ساده برای اداره کردن کد منبع
ھا token کامل باشیم . ھمچنین بدین معناست که کد منبع ،برای کاربردھای خاص قابل انتقال به فرم
است.
قسمت دوم D زبان برنامه نویسی
C/C++ برای چه کسانی مناسب نیست؟ ١.به طور واقع بینانه ، ھیچکس قصد تبدیل میلیونھا خط از D
اشاره مناسب apps برای D را کامپایل نمیکند C/C++ کد منبع اصلاح نشده D ندارد و از آنجا که D به
ھای ارث را به خوبی پشتیبانی میکند). ٢.برنامه ھای خیلی کوچک : CAPF ، D نیست. (به ھرحال
احتمالاً مناسبتر است. ٣.به عنوان Perl , Dmdscript , Python یک زبان اسکریپتی یا دارای مفسر مانند
برای برنامه نویسان D مناسبتر است java یا Python زبان برنامهنویسی برای شروع: برای مبتدیھا
یک زبان . D متوسط تا پیشرفته یک زبان دوم عالی است . ۴.زبان به کاربرد کلمات صحیح وسواسدارد
عملی است و ھر خصیصه از آن ترجیحاً قابل مقایسه و ارزیابی در ھمان حداست تا در حد ایدهآل . به
ساختارھا و مفاھیمی دارد که به طور مجازی نیاز به اشارهگرھا را برای امور پیشپا افتاده D طور مثال
ازبین میبرد. به طور مشابه تغییر نوعھا ھنوز وجود دارد برای آن جایی که سیستم نوع نیاز به نادیده
را در دستهھای C) نسبت به D( این قسمت برخی خصوصیات جالبتر D گرفتن دارد .خصوصیات اصلی
از کلاسھا آغاز D مختلف طبقهبندی میکند. برنامهنویسی شیءگرا کلاسھا : طبیعت شیءگرای
میشود. مدل وراثت ، وراثت یگانه است که با روابط تقویت میشود. شیء کلاس در ریشهی شجره
وراثت می نشیند. بنابراین تمام کلاسھا یک مجموعه متداول تابعی را اجرا میکنند. کلاسھا به وسیله
ارجاع معرفی میشوند و چنان کد پیچیدهای برای آنکه پساز استثناھا پاک شود نیاز نیست. تعریف
مجدد عملگرھا: میتوان کلاس را برآن واداشت که با استفاده از عملگرھای موجود ، سیستم نوع را
برای پشتیبانی نوعھای جدید گسترشدھند. مثلاً ایجاد کلاس اعداد بزرگ و سپس تعریف مجدد
عملگرھای (/,*,_,+) برای توانایی استفاده از آنھا در املای عبارات جبری معمولی.
پیمانهھا : فایلھای منبع دارای ارتباطی یکبهیک با پیمانهھا ھستند. به جای ( Productivity) فراوری
مینماییم. ھیچ نگرانی در مورد import نمودن یک فایل از اعلان ھا فقط پیمانه را include#
یا ifndef# با header ھای متعدد از ھمان پیمانه نیست ھمچنین نیازی به پوشاندن فایلھای import
معمولاً نیاز دارد که توابع و C++ و از این قبیل نیست. اعلان در برابر تعریف pragma once # یا endif#
صورت میگیرد و تعریف که در فایل منبع با header کلاسھا دوبار اعلان شوند یک اعلان که در فایلھای
این یک روند مستعد خطا و کسل کننده است . به طور واضح برنامهنویسفقط نیاز دارد “C.” . پسوند
که یک بار آن را بنویسید و سپسکامپایلر باید دادهھای اعلان را بسط دھد و برای وارد کردن نمادین در
میکند: مثال D دسترس قرار دھد. دقیقاً آن گونه که
class ABC { int func() { return 7; } static int z = 7; } int q;
ھا یا املاھایی مانند زیر نیست : extern ، دیگر نیاز به تعریف جدای توابع عضو، اعضای استاتیک
int ABC::func() { return 7; } int ABC::z = 7; extern int q;
ھم نوشته میشوند اما توابع inline به صورت {;return توابع جزیی مانند { 7 C++ تذکر : البته در
پیچیده نه. علاوه برآن اگر یک ارجاع بعد از آن موجود باشد تابع نیاز به الگو دارد که از قبل موجود باشد
کار نمی کند . C++ مثال زیر در
class Foo { int foo(Bar *c) { return c->bar; } }; class Bar { public: int bar() { return اما ;{ { ; 3
کد ھمارز در D کار می کند : class Foo { int foo(Bar c) { return c.bar; } } class Bar { int bar()
{ return 3; } }
است یا نه توسط تنظیمات بھینهساز قابل کنترل است . قالبھا inline به صورت D اینکه یک تابع
روشی واضح برای پشتیبانی برنامهسازی عمومی ھمراه با قدرت اختصاصیسازی به صورت D قالبھای
قسمت به قسمت ، پیشنھاد میکند. آرایهھای شرکتپذیر آرایهھای شرکتپذیر آرایهھایی ھستند با
یک نوع داده قراردادی (اختیاری) به عنوان ایندکسبه جای آنکه به یک ایندکساز نوع اعداد صحیح
ھستند. این آرایهھا ساختن سریع ، کارا و hash محدود باشند. در اصل آرایهھای شرکتپذیر جدولھای
در C++ و C خالی از اشکال جدولھای سمبل را آسان مینماید. تعریف نوعھای واقعی تعریف نوعھای
تعریف ،. D حقیقت نام مستعار نوع ھستند طوریکه ھیچ نوع جدیدی به طور واقعی مطرح نمیشود
نوعھای واقعی پیادهسازی میکند جایی که :
;type def int handle
ایجاد میکند . بر کنترل نوع تأکید شده است و تعریف نوعھا handle به طور واقعی یک نوع جدید به نام
در تعریف مجدد توابع شریک میشوند. برای مثال :
int foo(int i); int foo(handle h);
دارد . این امر بیشاز ھمه در ساخت bit یک نوع داده با نام D نوع داده پایه بیت است و bit نوع
آرایهھایی از بیتھا مفید است :
;bit [ ] foo
، inline توقع پشتیبانی از توابع معمول از جمله توابع عمومی ، توابع مجدد تعریف شده ، توابع D توابع
توابع عضو ، توابع مجازی ، اشارهگرھا به توابع و … را داشته است علاوه برآن : توابع تودرتو توابع
و تکنیکھای بستهبندی locality میتوانند درون توابع دیگر قرار گیرند. این امر در ساخت کد ، خاصیت
توابع بینام میتوانند به طور مستقیم در یک Functionliterals توابع بسیار مفید است. لفظھای توابع
دینامیک توابع محصور شده و توابع عضو کلاس بوسیله وکالت (Closure) عبارت جای داده شوند. وکالت
شدن برنامهسازی type safe میتوانند ارجاع داده شوند که این باعث آسانتر شدن و (delegate)
عمومی میشود. پارامترھای ورودی، خروجی ، ورودی خروجی این خصوصیسازی نه تنھا کمک
میکند که توابع خود مستندتر شوند بلکه بسیاری از موارد لزوم اشارهگرھا را بدون قربانی کردن ھیچ
چیز حذف و امکاناتی را برای کمک بیشتربه کامپایلر در پیدا کردن اشکالات کد فراھم میکند. بدین
ھای بیگانه ارتباط برقرار API این امکان فراھم میشود که مستقیماً با یک بازه وسیعتری از D ترتیب برای
C کند. و ھیچ نیازی برای کارھای جانبی مانند زبانھای تعریف ارتباطات وجود ندارد. آرایهھا آرایهھای
اشتباھات متعددی دارند که میتوانند تصحیح شوند. 1 :اطلاعات بعد با آرایه ھمراه نیست و بنابراین باید
ھستند که به argr و argc ذخیرهشده و جداگانه ارسال شود . مثال کلاسیک این مورد پارامترھای
فرستاده میشوند . main
main (int argc , char*argv[])
2آرایهھا اشیاء سطح اول نیستند .وقتی یک آرایه به عنوان پارامتر به یک تابع فرستاده میشود به یک .
اشارهگر برگردانده میشود حتی با اینکه الگوی تابع به طور گیج کنندهای می گوید که این آرایه است.
قابل تغییر اندازه C وقتی این برگرداندن انجام میشود تمام اطلاعات نوع آرایه گم میشود. 3 .آرایهھای
نیستند . این بدان معنی است که حتی چیزھای ساده ،انبوه و متراکم میگردد مانند یک پشته که
قابل کنترل نیست چون اصلاً مرز C نیازدارد به عنوان یک کلاس پیچیده ساخته شود. ۴.مرز یک آرایه
آرایه مشخص نیست. ۵.آرایهھا با علامت [ ] پساز شناسه اعلان میشوند . این به یک املای بیخود
و گیج کننده در اعلان اشیایی مانند اشارهگر به یک آرایه میانجامد :
int (*array ) [3];
اعلان . int [3] * array ; علامت [ ] در سمت چپ قرار میگیرد که فھم آن بسیار سادهتر است D در
تابعی که آرایه ای از اعداد Long [ ] func (int x); یک اشارهگر به یک آرایه سهتایی از اعداد صحیح
در چھار نوع میآیند : اشارهگرھا ، آرایهھای استاتیک ، D صحیح بلند را برمی گرداند آرایهھای
آرایهھای دینامیک و آرایهھای شرکتپذیر ،قسمت آرایهھا را ببنید ! رشتهھا پردازش رشتهھا آن قدر
زمخت و بدترکیب) که نیازمند پشتیبانی مستقیم در زبان برنامه C++ و C متداول است (و آن قدر در
الحاق رشتهھا ، کپی کردن و … را در دست میگیرند . ، D سازی است. زبانھای مدرن از جمله
رشتهھا رھاورد مستقیم پردازش بھینه شده آرایهھا ھستند.
بخشسوم D زبان برنامهنويسی
(Collection Grabage) کنترل منابع
کاملاً با جمعآوری زباله ھمراه است. تجربه شھودی بیان میکند که تعداد زیادی D تخصیصحافظه در
برای کنترل رھاسازی حافظه لازم است . با جمعآوری زباله زبان بسیار سادهتر C++ از خصوصیات
میشود.
حکمی ھست که میگوید جمعآوری زباله برای جوجه برنامهنویسھا و تنبلھا است. من به یاد دارم
قابل C نیست که در C++ گفته میشد. بعد از ھمه ھیچ چیز در C++ زمانی را که این حرف در مورد
انجام نباشد یا در اسمبلر برای آن منظور.
C++ و C خصوصیات جمعآوری زباله کد خسته کننده پیگیری تخصیص حافظهھای مستعد خطا که در
لازم است را حذف میکند. این نه تنھا بدین معناست که گسترش برنامهھا سریعتر انجام میگیرد و
ھزینهھای نگھداری کاھشمی یابد بلکه برنامه به میزان زیادی در دفعات اجرا سریعتر است.
کنترل حافظه ساده و واضح
میتوانند در کلاسھای delete و new یک زبان دارای جمعآوری زباله است ، اعمال D با وجود اینکه
خاص اجرا شوند ھمانگونه که یک تخصیص دھنده سفارشی به کار میرود.
RAII
از D ، یک تکنیک پیشرفته گسترش نرمافزار برای کنترل تخصیص منابع و آزادسازی آنھا است RAII
در یک روش کنترل شده قابل پیشبینی که مستقل از چرخه جمعآوری زباله است پشتیبانی RAII
میکند .
کارایی
توده سبک وزن
و نیز C را پشتیبانی میکند ھم برای سازگاری با ساختمان دادهھای C ساختمانھای سبک ساده D
به خاطر اینکه آنھا در جاھایی که قدرت کامل کلاسھا کارایی ندارد مفیدند.
Assembler Inline
درایور سخت افزار ، کاربردھای سیستمی با کارایی بالا ، سیستم ھای تعبیه شده و کدھای خصوصی
شده بعضی وقتھا نیاز به غرق شدن در زبان اسمبلی دارند تا کار انجام شود . در حالی که پیاده سازی
نیاز به کارگیری اسمبلر خطی ندارند ، این خصوصیت تعریف شده و قسمتی از زبان است . D ھای
اغلب نیازھای کد اسمبلی به وسیله این بخشقابل برآوری است که نیاز به اسمبلرھای جداگانه و
ھا را مرتفع می سازد . DLL
از پردازشدرگاھھای C توابع اصلی را شبیه به پشتیبانی ذاتی D ھمچنین بسیاری از پیاده سازی ھای
ورودی خروجی ، دسترسی مستقیم به عملیاتھای ممیز شناور و … پشتیبانی می کند .
قابلیت اعتماد
یک زبان پیشرفته باید برنامه نویسرا در رفع تمامی اشکالات از کد یاری کند . این کمک به چندین
صورت می تواند ارائه شود . از آسان سازی کاربرد تکنیکھای قدرتمند تر ، تا گوشزد کردن کد غلط
آشکارا توسط کمپایلر و کنترل زمان اجرا .
( Contracts ) معاھدات
یک تکنیک انقلابی برای کمک به مطمئن شدن از صحت ( B.Meyer طراحی به وسیله کنترات ( ساخته
شامل پیششرطھای توابع ، پسشرطھای توابع ، یکسانی ھای D زبان DBC برنامه است و نسخه
کلاسو کنتراکتھای ثابت کننده است .
آزمایشواحد
آزمایشقسمتھا می تواند به یک کلاس افزوده شود طوری که به صورت خودکار در لحظه شروع اجرای
برنامه اجرا شوند . این در ھشدار دادن اینکه پیاده سازی کلاسدر ھر بار ساخته شدن ،سھواً با
شکست مواجه نشده است مفید است آزمایشواحد قسمتی از کد کلاس را تشکیل می دھد . ایجاد
آنھا یک قسمت طبیعی پر دارد گسترش کلاس خواھد شد برخلاف پشت گوشانداختن کد تمام
شده از گروھھای آزمایش.
آزمایشواحد در دیگر زبانھا قابل انجام است اما نتیجه جالب از آب در نمی آید زیرا این زبانھا با این فکر
است . برای توابع کتابخانه ای به خوبی D عجین نیستند . آزمایشواحد یک خصوصیت اصلی و بارز در
عمل می کند ھم ضمانت می کند که تابع حقیقتاً کار می کند و ھم با مثال بیان می کند که تابع
موجود در اینترنت برای C++ چگونه کار می کند . خیل کثیر کدھای منشاء کاربردی و کتابخانه ھای
دانلود را در نظر بگیرید . چه تعداد از آنھا با تستھای کلی ھمراه است ( تست واحد را ھم در نظر
نگیرید ) ؟ کمتر از یک درصد . روش معمول این است که اگر کامپایل شده اجرا ھم می شود و شگفت
زده خواھیم شد اگر ھشدارھای کامپایلر اشکالات واقعی باشند .
را به مراتب به بھترین زبان برای نوشتن قابل اعتماد و D ، در کنار طراحی با کنتراکت ، آزمایشواحد
کاربردھای سیستمی قدرتمند تبدیل می کند.
خصوصیات و شرح اشکال زدایی
که در زمان کامپایل قابل فعال یا غیر فعال . ( debug ) اکنون اشکال زدایی بخشی از املای زبان است
یک قابلیت تشخیصسازگار debug شدن است بدون کاربرد دستورات پیشپردازنده یا ماکروھا . املای
- استوار و قابل حمل و قابل فھم را فعال می کند که آیا کد منبع حقیقی قابل ایجاد در کامپایل اشکال
زدایی و کامپایل نھایی ھست ؟
پردازش استثناء
به کار رفته است . نیاز نیست که اشیای try - catch به جای مدل فقط finally - try - catch مدل برتر
پیاده سازی کنیم . ( destructor ) زائد ایجاد کنیم فقط برای اینکه معناھای نھایی را توسط مخرب
ھماھنگی و ھم زمانی
مبناھایی برای ساخت برنامه ھای چند رشته ای D برنامه سازی چند رشته ای متداولتر می شود و
فراھم می کند . ھم زمان سازی می تواند ھم در سطح متد و ھم در سطح شیئی انجام شود .
{.} ( ) synchronize int func
توابع ھمزمان شده ( سنکرون شده ) در ھر زمان فقط به یک رشته اجازه می دھند که آن تابع را اجرا
در اطراف قطعه ای از عبارات احاطه می کند و دسترسی به وسیله شیئی synchronix\ze کند . عبارت
یا به صورت عمومی را کنترل می کند .
پشتیبانی تکنیکھای قدرتمند
آرایه ھای دینامیک به جای اشاره گر ھا
متغییرھای ارجاعی به جای اشاره گر ھا
اشیای ارجاعی به جای اشاره گرھا
جمع آوری زباله به جای کنترل واضح و دستی حافظه
مبانی موجود برای ھمزمانی رشته ھا
عدم وجود ماکرویی که به طور غیر عمدی به کد آسیب بزند .
به جای ماکروھا inline توابع
کاھشوسیع نیاز به اشاره گرھا
سایز انواع مرکب واضح و مشخص است
عدم شک در مورد علامت دار بودن کاراکتر ھا
header عدم نیاز به دوبار اعلان در کد منبع و فایلھای
پشتیبانی واضح از تجزیه و تحلیل برای افزودن کد اشکال زدایی
قسمت چھارم D آشنایی با زبان
کنترل ھای زمان کامپایل
کنترل نوع قوی تر
• انتساب مقادیر به صورت واضح مورد نیاز است
• مجاز نبودن متغییرھای محلی به کار نرفته
• عدم ؛ خالی در بدنه حلقه ھا
• انتساب ؛ مقادیر بولی بر نمی گرداند
ھای متروک API • نپسندیدن
کنترل زمان اجرا
( ) assert • عبارات اثبات صحت
• کنترل مرزھای آرایه
switch تعریف نشده در استثنای case •
• استثنای خارج از حافظه
• ورودی ، خروجی و طراحی یکسان کلاس به وسیله کنتراکت
سازگاری
تقدم عملگر و قوانین سنجش
و قوانین تقدم آنھا را حفظ می کند ھمچنین ترتیب قوانین سنجشو قوانین تقدم . این C عملگرھای D
از اشکالات ریز که از ابتدای برنامه نمایان می شود جلوگیری می کند .
C ھای API دسترسی مستقیم به
را فراھم می سازد . C دارد ھمچنین دسترسی مستقیم به توابع C نوع داده ھای مطابق با D نه تنھا
ھیچ نیازی نیست که توابع بسته بندی شده نوشته شود یا کدی برای کپی کردن اجزای متراکم یک
توده به صورت یک به یک
C پشتیبانی از تمام نوع داده ھای
٩٩ را در بر می C ممکن است . این پشتیبانی تمام انواع C و یا کد کتابخانه ای C زبان API ارتباط با ھر
شامل توانایی صف بندی اعضای ساختمان است برای مطمئن شدن از سازگاری با فرمتھای D . گیرد
داده خارجی .
پردازش استثنای سیستم عامل
متصل به روشی است که سیستم عامل در سطح زیرین استثناھا را D مکانیسم پردازش استثناھای
در یک کاربرد پردازش می کند .
ابزارھای موجود را به کار می گیرد .
ایجاد می کند که باعث امکان استفاده از اسمبلرھا ، لینکرھا Object کد را در فرمت استاندارد فایل D
و دیگر تحلیل کننده ھای استاندارد به خوبی لینک exe فشرده سازھای ، ( debugger ) ،اشکال زداھا
کردن کدی که دیگر زبانھا نوشته شده است می شود.
کنترل پروژه
نسخه سازی
و # if # تکنیک D . به صورت درونی امکان ایجاد نسخه ھای متعدد از یک برنامه یا ھمان متن را دارد D
را جایگزین می کند . C پیشپردازندهی end if
نبود ھشدار
ھشدارھایی برای کدھای نامطمئن تولید نمی کنند . کد یا توسط کامپایلر قابل قبول D کامپایلرھای
است یا نیست . این ھر گونه بحثی در این زمینه که آیا ھشدار خطایی صحیح است یا نه و نیز ھر
بحثی در این باره که با چه کنیم را از بین می برد . نیاز برای ھشدار کامپایلر نشانهی طراحی ضعیف
زبان است .
استھلاک
ھمان طور که در طول زمان رشد می کند بعضی کدھای کھنه کتابخانه با نو تر و نسخه بھتر جایگزین
می شود . نسخه قدیمی باید برای پشتیبانی کدھای به جا مانده از قبل موجود باشد اما می توانند
لقب مستھلک بگیرند . کدھایی که نسخه ھای مستھلک را به کار می گیرند به وسیله تعویض کمپایلر
برچسب غیر قانونی م یخ ورند که برای ابقای برنامه نویس برای نشان دادن ھر وابستگی به خصوصیات
مستھلک باعث آسانی است .
غربال اراتستن واحد اول ) ) D نمونه برنامه
import c.stdio ;
bit [8191] flags ;
int main ()
{ int i , count , prime , k , inter ;
print f(“ 10 iterations \n” );
for ( iter = 1 ; iter<=10 ; iter ++ )
{ count = 0 ;
flags [ ] = 1 ;
for ( i = 0 ; i < flags . length ; i ++ )
{ if ( flags [i] )
{ prime = i + i +3
k = i + prime
while ( k < flags . length )
{ flags , [ k] = 0 ;
k + = prime ;}
count + = 1}
print f ( “ % d primes” , count ) ;
return 0;
قسمت پنجم D آشنایی با زبان
مقادیر واسطه ممیز شناور
در بسیاری کامپیوترھا ،اعمال با دقت بالاتر بیشتر از اعمال با دقت کمتر وقت نمی گیرند .این باعث می
شوند که مفاھیم شمارشی بالاترین دقت ممکن را برای اعمال داخلی موقتی به کار ببرند . فلسفه
مورد بحث این است که زبان را به پائین مقسوم علیه سخت افزاری محدود کنیم بلکه آن را قادر به
بھرهبرداری از بھترین توانایی ھای سخت افزار مورد نظر نماییم .
برای اعمال ممیز شناور و مقادیر واسطه عبارت یک دقت بالاتر از نوع عبارت می تواند به کار رود . تنھا
حداقل دقت توسط نوع عملوندھا مشخصمی شوند نه حداکثر دقت . نکته پیاده سازی : در ماشین
٨۶ برای نمونه انتظار می رود ( اما لازم نیست ) که محاسبات واسطه ای در دقت کامل x ھای اینتل
ھستاد بیتی که توسط سخت افزار پیاده سازی می شود انجام شود .
امکان دارد که در مسیر استفاده از مقادیر موقت و زیر عبارات معمول ، کد بھینه شده یک جواب دقیقتر
از کد بھینه نشده فراھم سازد .
الگوریتم ھا باید طوری نوشته شود که براساس حداقل دقت محاسبات کار کند . آنھا نباید در مواقعی
برخلاف float یا double که دقت واقعی بالاتر است از نظر عملکرد تنزل یابند یا شکست بخورند . انواع
نوع گسترش یافته فقط باید در موارد زیر به کار رود :
• کاھشمصرف حافظه برای آرایه ھای بزرگ .
. C • داده ھا و آرگومان ھای توابع سازگار با
انواع موھومی و مختلط
در زبان ھای موجود ، یک تلاشعجیب برای به زور جا دادن انواع مختلط در تسھیلات تعریف نوع موجود
مانند قالب ھا ،ساختمان ھا و … وجود دارد و تمام اینھا معمولاً در نھایت با شکست مواجه
میشوند .
شکست می خورند چون مفاھیم اعمال مختلط می تواند بسیار دقیق باشد و کامپایلر نمی داند که
برنامه نویسدر تلاش برای انجام چه کاری است بنابراین نمی تواند پیاده سازی معنایی را بھینه نماید .
تمام این کارھا برای اجتناب از اضافه کردن یک نوع جدید انجام شده است . اضافه کردن یک نوع جدید
بدین معناست که کامپایلر می تواند تمامی مفاھیم اعمال مختلط را دقیق پیاده کند . پسبرنامه نویس
می تواند بر یک پیاده سازی صحیح ( یا حداقل دارای ثبات ) اعداد مختلط اعتماد کند .
ھمراه بودن با یک بسته نوع مختلط برای یک نوع موھومی مورد نیاز است .یک نوع موھومی برخی از
پیامدھای ظریف معنایی را حذف می کند و کارآیی را بھبود می بخشد بدون اینکه مجبور به انجام
می i اعمال اضافی روی قسمت حقیقی واضح صفر ، باشیم . الفاظ موھومی دارای یک پسوند
باشند .
; i ١٫٣imaginary j =
ھیچ املای خاص لفظ مختلط وجود ندارد فقط یک نوع حقیقی و موھومی را با ھم جمع کنید :
; i٢+ ۴٫۵complex c=
افزودن دو نوع جدید به زبان کافی است از این رو انواع مختلط و موھومی دارای دقت توسعه یافته
ھستند . ھیچ نوع اعشاری مختلط و موھومی یا نوع دابل مختلط یا موھومی وجود ندارد ( توجه : راه
برای افزودن آنھا در آینده باز است اما مطمئن نیستیم مورد نیاز باشد ) .
اعداد مختلط دارای دو صفت خاصه ھستند :
re. . قسمت حقیقی را به عنوان گسترش یافته بدست می دھد
im. . قسمت موھومی را به عنوان عدد موھومی بدست می دھد
برای مثال :
c . re is 4.5
c . im is 2i
کنترل گرد کردن
املایی D . ٧۵۴ شامل توانایی تنظیم کردن چھار روش گرد کردن است IEEE حسابگر ممیز شناور
[ blah , blah , blah ] : خاص برای دسترسی به آنھا افزوده است
پرچمھای استثناء
٧۵۴ می تواند پرچمھای مختلف را براساس آن چه در یک محاسبه رخ داده IEEE حسابگر ممیز شناور
Reset / SET این پرچمھا می توانند به وسیله املای زبان .[ blah , blah , blah ] : است تنظیم نماید
شوند .
مقایسه ھای ممیز شناور
تعداد بیشتری که خاص D علاوه بر عملگرھای مقایسه معمولی < , < = , > , >= , == , != زبان
اعداد ممیز شناور است اضافه می کند .
مدیریت حافظه
ھر برنامه غیر جزیی نیاز به تخصیص و آزاد سازی حافظه دارد . ھر چه پیچیدگی ، اندازه و کارآیی برنامه
اختیارات متعددی در زمینه مدیریت D . ھا افزایشمی یابد تکنیکھای مدیریت حافظه مھمتر می شوند
حافظه پیشکشمی کند .
: D سه روش پایه تخصیصحافظه در
١- داده استاتیک : در سگمنت داده پیشفرض تخصیص می یابند .
تخصیص می یابند . CPU ٢- داده پشته : در پشته برنامه
جمع آوری زابله تخصیص می یابند . heap ٣- داده زباله جمع آوری شده : به صورت پویا در
این قسمت بعدی تکنیکھا را برای استفاده از آنھا توضیح می دھد به ھمراه برخی قابلیت ھای
پیشرفته:
copy – on – write ( رشته ھا ( و آرایه ھا
فرستادن یک آرایه به یک تابع را در نظر بگیرید و احتمالاً تغییر دادن آرایه و برگرداندن آرایه جدید . از آنجا
که آرایه ھا با ارجاع فرستاده می شوند نه با مقدار ، یک پیامد وخیم این است که محتویات آرایه از آن
کیست ؟ برای مثال تابعی که آرایه ای از کاراکترھا را به حروف بزرگ برمی گرداند .
char [] toupper ( char [] S )
int i ;
for ( i =0 ; i < S . length ; i ++ )
char ( ‘a’ <= c && c<=’z’ )
S[i] = c – ( cast (char) ‘a’ – ‘A’ );
Return S;
که فراخوانی شد تغییر ھم کرد شاید این اصلاً آن چیز مورد توقع نبود یا بدتر []S توجه کنید که نسخه
ممکن است تکه ای از حافظه فقط خواندنی باشد . []S آنکه
ھمواره توسط تابع ساخته می شد به طور ناکارا و بدون لزوم زمان حافظه برای S اگر یک کپی از
حروفی که خودشان بزرگ ھستند مصرف می شد .
است که یعنی یک کپی ساخته می شود اگر رشته ھا نیاز به copy – on – write راه حل پیاده سازی
تغییر دارند بعضی زبان ھای پردازنده رشته ھا این عمل را به عنوان پیش فرض انجام می دھند اما
ھزینه بسیار سنگین است .
۵ مرتبه بوسیله تابع کپی می شود. برای اینکه از این قرارداد به نحوی با abcdwF” “ در نتیجه آن رشته
حداکثر کارآیی استفاده شود باید به صورت واضح در کد ظاھر شود .
char [] toupper (char [] s)
int changed ;
int i ;
changed = 0 ;
for i=0 ; i <S-length ; i ++ )
char c – S[i ] ;
if (‘a’ <= c && c<= ‘z’ )
if ( ! changed )
char [] r = new char [ S.length] ;
r []= S ;
changed = 1 ;
S [i] = c – ( cast ( char ) ‘a’ – ‘A’ );
return S ;
phibo پروتکلی است که به وسیله توابع پردازش آرایه ھا در کتابخانه زمان اجرای copy – on – write
پیاده سازی شده است . D زبان
جمع آوری زباله
زبانی دارای جمع آوی زباله کامل می باشد . بدین معنی که ھیچ وقت نیاز به آزادسازی حافظه D
نیست . فقط به ھنگام نیاز حافظه را تخصیص دھید و جمع آور زباله به طور دوره ای تمام حافظه بی
استفاده را به توده حافظه آزاد برمی گرداند .
که به کنترل دستی حافظه ھنگام تخصیص و آزاد سازی آن عادت دارند C ++ , C برنامه نویسان
احتمالاً مزایا و تأثیر جمع آوری زباله یقین ندارند . تجربهی پروژه ھای جدید که با در نظر گرفتن جمع
آوری زباله نوشته شده اند ھمچنین پروژه ھای موجود که به سبک جمع آوری زباله برگردانده شده اند
نشان می دھد که :
• برنامه ھای دارای جمع آور زباله سریعتر ھستند . این واضح است اما دلایلی قابل بیان است .
• شمارشدر جاعات یک روش معمول برای حل مسائل تخصیص حافظه آشکار است . کد پیاده سازی
اعمال اضافه و تفریق ھر جا که انتساب صورت می گیرد یکی از دلایل کندی است .
• پنھان کردن کد مذکور در پسکلاسھای اشاره گر ھوشمند به افزایش سرعت کمک نمی کند .
( روش شمارشارجاعات به ھیچ وجه راه حل عمومی نیست جایی که ارجاعات حلقه ای ھرگز حذف
نمی شوند . )
• مخرب ھای کلاس برای آزادسازی منابع مورد نیاز یک شیئی به کار می رود . برای اغلب کلاسھا این
منابع ، حافظه تخصیصیافته است . با جمع آوری زباله اغلب مخرب ھا خالی می شوند و در نھایت
می توانند دور انداخته شوند .
• تمام مخرب ھایی که حافظه را آزاد می کنند می توانند معنی دار شوند در مواقعی که اشیاء ، بر روی
پشته تخصیص حافظه می یابند . برای ھر کدام مکانیزمی باید در نظر گرفته شود طوری که اگر یک
استثناء رخ داد تمام مخربھا از ھر چارچوب فراخوانی شوند تا ھر حافظه تخصیص یافته برای آنھا را رھا
کنند . اگر مخرب ھا نامربوط شوند ھیچ نیازی برای در نظر گرفتن چارچوب ھای خاص پشته برای
پردازش استثناھا نیست در نتیجه کد سریعتر اجرا می شود .
• تمام کدھای لازم برای مدیریت حافظه می تواند برای تکامل جزیی اضافه شود . برنامه بزرگتر کمتر در
حافظه اصلی و بیشتر آن در حافظه مجازی قرار می گیرد و آرامتر و کندتر اجرا می شود .
جمع آور حافظه ھنگامی صورت می گیرد که حافظه تنگ و کم شود . تا وقتی حافظه جا ××××× •
دارد برنامه در حداکثر سرعت ممکن اجرا می شود و ھیچ وقتی برای آزاد کردن حافظه ، صرف نمی
کند .
• جمع آورنده ھای زباله مدرن ، اکنون به مراتب پیشرفته تر از قبلی ھا و کندترھا ھستند . جمع آورنده
ھای تولید کننده و کپی کننده قسمت عمده ناکارایی الگوریتم ھای جارو کردن و اختصاص دادن را حذف
می کنند .
• جمع آورنده ھای زباله مدرن فشرده سازی توده حافظه را انجام می دھند . فشرده سازی توده
مراقب است که تعداد صفحاتی که به طور فعال به وسیله یک برنامه ارجاع شده اند را کاھشدھد
بدین معنی که دسترسی ھای حافظه احتمالاً بیشتر به حافظه می رسند تا به مبادله حافظه .
• جمع آورنده ھای زباله حافظه استفاده شده را اصلاح می کنند . بنابراین به رخنه ھای حافظه - که
باعث می شوند برنامه ھای با اجرای طولانی مدت آن قدر حافظه مصرف کننده تا سیستم ھنگ کند -
تن در نمی دھد .
• برنامه ھای دارای جمع آور زباله دارای اشکالات کمتر یافتن اشاره گرھا می باشند به این خاطر که
ھیچ ارجاع سرگردان به حافظه آزاد شده نمی ماند .
• برنامه ھای دارای جمع آور زباله برای گسترش و اشکال زدایی سریعترند . چون ھیچ نیازی برای
گسترش ، اشکال زدایی ، امتحان ، یا ابقاء که آزاد سازی آشکار وجود ندارد .
• برنامه ھای دارای جمع زباله به طور معنی داری کوچکترند چون ھیچ که آزادسازی حافظه وجود ندارد
و از این رو نیازی به پردازشگرھای استثناھا برای آزاد سازی حافظه وجود ندارد .
• جمع آوی زباله یک نوشداروی ھم کاره نیست بعضی اشکالات ھم دارد :
• وقتی یک مجموعه برنامه ھمزمان اجرا می شود قابل پیشگویی نیست بنابراین برنامه به طور دلخواه
می تواند مکث کند.
• زمانی که برای اجرای یک مجموعه منصرف می شود نامحدود است با اینکه در عمل بسیار کوتاه
است اما ضمانتی وجود ندارد .
• تمام رشته ھای اجرا به غیر از رشته جمع آوری زباله در حالی که جمع آوری در جریان است باید
مکث کند .
نحوه برقراری ارتباط اشیای دارای جمع آوری زباله با کد بیرونی:
جمع آور زباله به دنبال ریشه ھا د سگمنت داده ایستا و پشته ھا و محتویات رجیستر ھر رشتهی اجرا
می گردد. اگر تنھا ریشه یک شیئی بیرون از آنھا باشد ، جمع آور زباله آن را از بین می برد و حافظه
را آزاد میسازد.
برای اجتناب از این واقعه باید:
ریشه دسترسی به یک شیئی را در جایی ابقا کنیم که جمع آور زباله در آن جا به دنبال ریشه می
گردد .
C به شیئی مجدداً توسط تخصیص دھنده که خارجی یا کتابخانه ھای زمان اجرای
حافظه تخصیص دھیم . ، ( ( malloc/free
اشاره گرھا و جمع آور زباله
الگوریتم ھای جمع آوری زباله بستگی دارد به اشاره گرھایی که به چیزی در حال اشاره اند و غیر
غیر معمول نیستند C اشارهگرھا که به چیزی اشاره نمی کرده اند . بدین منظور دستورات زیر که در
از آنھا خودداری شود : D باید به دقت در
شده حقهی لیست xor کردن آنھا با مقادیر دیگر مخفی نکنید مانند اشاره گر xor ١) اشاره گرھا را با
برای جا به جا کردن مقادیر دو اشاره گر استفاده نکنید . xor از حقهی . C پیوندی در
یا دیگر حقه ھا ذخیره نکنید چون جمع آوری زباله انواع cast ٢) اشاره گرھای به مقادیر صحیح را توسط
غیر اشارهگر را برای یافتن ریشه ھای دسترسی بررسی نمی کند .
٣) از مزیت ھم ترازی اشاره گرھا برای ذخیره فلگھای بیتی در بیتھای سطح پائین یا بیتھای سطح بالا
استفاده نکنید .
۴) مقادیر صحیح را در اشاره گرھا نگھداری نکنید و
. null ۵) مقادیر سحر آمیز را در اشاره گرھا ذخیره نکنید به غیر از
۶) اگر شما باید یک مکان نگھداری خاص را بین انواع اشاره گر و غیر اشارهگر به اشتراک بگذارید از
استفاده کنید تا جمع آور زباله تکلیف خودش را در آن مورد بداند . union
دارای خصوصیات است که نشان می D . در حقیقت تا جایی که می شود از اشاره گرھا استفاده نکنید
دھد که اغلب اشاره گرھای آشکارا ، متروک و بلااستفاده خواھند بود . مانند اشیاء مرجع ، آرایه ھای
و بعضی کارھای کیمیاگرانه پدید C ھای API پویا و جمع آوری زباله . اشاره گرھا برای ارتباط موفق با
آمده بودند .
ساختمانھا و یونیون ھا
Aggregate Declaration
کار می کنند با تفاوتھای زیر : C شبیه
١) بدون فیلد ھای بیت
٢) ھم ترازی به طور آشکار قابل مشخص کردن است .
٣) بدون فضای نام برچسب جداگانه – نام برچسب ھا در حوزه کنونی می باشند .
; ABC x : مجاز نیستند بنویسید ; struct ABC x ۴) اعلان ھایی مانند
۵) ساختمانھا یا یونیون ھای بی نام می توانند عضوی از ساختمانھا یا یونیون ھای دیگر باشند .
۶) انتساب دھنده ھای پیشفرض اولیه برای اعضا پشتیبانی می شود .
٧) توابع عضو و اعضای استاتیک مجاز است .
ساختمانھا و یونیون ھا به معنی اجتماع ساده داده ھا یا راھی برای رنگ و آب دادن به یک ساختمان
سیستم API داده می باشد ، علاوه بر سخت افزار یا یک نوع خارجی ، انواع خارجی می توانند توسط
عامل یا یک فرمت فایل تعریف شوند . خصوصیات شیئی گرا نیز با نوع داده کلاس فراھم شده اند .
انتساب اولیه استاتیک ساختمان ھا
به اعضای ساختمان استاتیک به طور پیشفرض مقدار صفر انتساب داده می شود و به مقادیر ممیز
اگر یک انتساب دھنده اولیهی استاتیک فراھم شود ، اعضا به وسیله نام عضو ، . NAN شناور مقدار
کولوم و املای عبارت انتساب اولیه می شوند . در ضمن ممکن است اعضا به ھر نحو انتساب اولیه
شوند .
struct X { int a; int b; int c; int d = 7;}
static X x = { a:1, b:2}; // c is set to 0, d to 7
static X z = { c:4, b:5, a:2 , d:5}; // z.a = 2, z.b = 5, z.c = 4, d = 5
انتساب اولیهی استاتیک یونیون ھا
یونیون ھا به طور آشکار مقدار دھی اولیه می شوند :
union U { int a ; double b ; }
static U u = { b : 5.0 } ; // u.b = 5.0
دیگر اعضای یونیون که انتساب دھنده را جای می گذارند ولی فضای بیشتری اشغال می کنند مقدار
صفر می گیرند .
Enums
Enum اعلان
اعضا { enum identifier {
اعضا { enum {
enum identifier ;
را با ثبات ھای تعریف جایگزین می کنند . define # ھا کاربرد معمولی ماکروھای Enum
ھا ھمچنین می توانند بی نام باشند که در آن مورد به سادگی ثابت ھای مجتمع را تعیف می Enum
کنند و یا دارای نام باشند که مقدمه یک نوع جدید خواھند بود .
enum بدون نام {A,B,C } enum ٠ ثابتھای , A= ١, b= ٢C =
٠ و X.A = با مقادیر x نوع جدید {enum X { A,B,C دارای نام Enum را تعریف می کند . در حالی که
٢ تعریف می کند . X.C = ١ و = X.B
یک عبارت ریاضی فراھم شده Enum ھا باید حداقل دارای یک عضو باشند . اگر برای یک عضو Enum
دارای ارزش عضو قبلی به علاوه Enum باشد ارزش عضو مذکور برابر حاصل عبارت است و عضو بعدی
یک است .
Enum { A , B = 5 + 7 , C, D = 8 , E }
٩, E = ٨, D = ١٣, C = ١٢B = , ٠ = A داریم
Enum صفات
min کوچکترین عضو
max بزرگترین عضو
size سایز نگھداری ارزش عضو
Enum مقدار دھی
دارای مقدار اولین عضو است . Enum در غیاب یک مقدار دھنده به صورت آشکار ، یک متغیر
Enum X { A = 3 , B,C }
; X x . برابر ٣ می شود X مقدار
hamid
hamid
کاربر متوسط
کاربر متوسط

تعداد پستها : 27
تاريخ التسجيل : 2009-10-24
العمر : 38

http://shakibakurdestan.iranblog.com

بازگشت به بالاي صفحه اذهب الى الأسفل

بازگشت به بالاي صفحه

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
شما نمي توانيد در اين بخش به موضوعها پاسخ دهيد