مروری بر ویندوز ۸ و طریقه نصب آن

سپتامبر 25, 2011 بیان دیدگاه

چند روزی است که صحبت ویندوز ۸ گل سرسبد محافل دوستداران تکنولوژی شده است. از همین رو من هم مشتاق شدم و نسخه‌ای که برای پیش نمایش ارائه شده است را از این لینک دانلود کردم. پس از دانلود تصمیم به نصب گرفتم ولی نمی‌خواستم برنامه را روی کامپیوتر به صورت مستقیم نصب کنم. از این رو نرم‌افزار VirtualBox را از اینجا  دانلود کردم تا بتوانم ویندوز را به صورت مجازی روی یک ماشین مجازی نصب کنم. ابتدا یک ماشین مجازی از نوع ویندوز ساختم نسخه مربوط را از نوع other گذاشتم اما پس از نصب کامل ویندوز متوجه شدم که هیچ کدام از درایورها نصب نشده‌اند و مشکلات فراوانی برای کار با ویندوز وجود داشت، به همین خاطر این بار تصمیم گرفتم که مجددا ویندوز را نصب کنم ولی نوع ماشین را از نوع ویندوز ۷ انتخاب نمایم، حدسم درست بود و ویندوز به همراه تمام درایورهای سخت‌افزاری ماشین نصب شده بودند. پس برای نصب می‌توانید مراحل زیر را طی نمایید:

۱- بر روی دکمه New کلیلک نمایید و از اولین صفحه ظاهر شده بر روی Next کلیک نمایید.

۲- در صفحه بعد یک نام برای ماشین وارد نمایید، و نسخه ویندوز را ویندوز ۷ بگذارید.

۳- در مرحله بعد باید میزان حافظه ماشین را مشخص نمایید، من خودم ۱۰۲۴ مگابایت حافظه انتخاب کردم.

۴- در مرحله بعد برای ماشین خود یک هارددیسک می‌سازید. این قسمت را بدون تغییر ادامه دهید.

۵- از دو مرحله بعد هم با زدن دکمه Next بگذرید و در مرحله سوم سایز و محل فیزیکی هارد دیسک خود را مشخص نمایید. پیشنهاد من برای سایز ۲۰ گیگابایت است.

۶- در مراحل بعد مشخصات کلی ماشین به شما نمایش داده می‌شود و با کلیک روی دکمه Create می‌توانید ماشین را ساخته و کار را به پایان برسانید.

۷- پس از اتمام ساخت ماشین روی دکمه Start ماشین کلیک نمایید و از اولین صفحه روی دکمه Next کلیک نمایید.

۸- در این مرحله شما باید مدیای مربوط به نصب را انتخاب نمایید. می‌توانید آدرس فایل iso دانلود شده را انتخاب نمایید و روی دکمه Next کلیک نمایید و از صفحه بعد هم Start را بزنید تا نصب ویندوز شروع شود.

 از این به بعد نصب شبیه به نصب ویندوز ۷ است و با چند مرحله و با سرعت ویندوز ۸ نصب خواهد شد. پس از اینکه نصب به پایان رسید اولین چیزی که نظر من را در اولین اجرای ویندوز جلب کرد ظاهر متفاوت و ساده آن بود. شما می‌توانید به دو صورت کاربر روی ویندوز بسازید : الف) از طریق یک کاربر موجود بر روی microsoft live ب) کاربر محلی من یک کاربر محلی ساختم و وارد محیط ویندوز شدم.

اولین صفحه‌ای که با آن مواجه شدم واسط کاربری جدید با عنوان مترو بود.

واسط کاربری مترو

در این صفحه که مشخصا برای سخت‌افزارهای لمسی بهینه شده است به راحتی می‌توانید نرم‌افزارهای مختلف ارائه شده را اجرا نمایید و بین آن‌ها به راحتی حرکت نمایید. اگر بر روی Desktop کلیک نمایید به محیط سنتی ویندوز خواهید رفت و در آنجا می‌توانید مانند قبل کار کنید. تفاوتی که در این نوع به وجود آمده تغییر منوی Start است که شما هرگاه به گوشه پایین سمت چپ صفحه می‌روید به صورت خودکار نمایش داده می‌شود. این مدل کار کردن برای صفحات لمسی بهینه شده است.

منوی start ویندوز ۸

 مورد بعدی که نظرم را جلب کرد استفاده از منوی ریبون در windows explorer بود. شاید باید کمی بگذرد تا به ساختار جدید عادت کنیم.

 

Windows Explorer در ویندوز ۸

 task manager هم تغییرات جالبی کرده و ساختار خوبی پیدا کرده است. ظاهر نمودارهای آماری مربوط به منابع استفاده شده سیستم هم به نظر من بسیار زیباتر از قبل است.

Task Manager در ویندوز ۸

در ادامه برای نصب صفحه کلید زیان فارسی وارد Control Panel ویندوز شدم. این بخش جاییست که تغییرات اساسی کرده است. واسط کاربری جدید و ساده آن که بهینه‌سازی آن برای صفحات لمسی مشهود است، توجه من را به خود جلب کرد. در زیر می‌توانید تصویری از این ساختار جدید را ملاحظه نمایید.

کنترل پنل ویندوز ۸

در انتها گزینه‌ای وجود دارد که پس از انتخاب آن، کنترب پنل قدیمی مدل ویندوز ۷ به نمایش در می‌آید. از آنجا صفحه کلید فارسی را به ویندوز اضاف کردم. در این ویندوز یک صفحه کلید لمسی در هر کجا که بخواهید در اختیار شماست. موردی که پس از نصب زبان فارسی نظر من را جلب کرد استاندارد صفحه کلید بود که ظاهرا از استاندارد ۹۱۴۷ تبعیت می‌کند. این خبر خوبیست چون من همیشه باید این کیبورد را نصب می‌کردم!!!

صفحه کلید لمسی فارسی ویندوز ۸

 اگر از واسط کاربری مترو بر روی گزینه Internet Explorer کلیک نمایید، IE نسخه ۱۰ را خواهید که ظاهری کاملا متفاوت دارد.

Internet Explorer 10 در ویندوز ۸

به نظر من یکی از نقاط قوت ویندوز، جستجوی بسیار جالب و سریع آن است. ظاهر این جستجو هم بسیار جالب و کاراست.

جستجو در ویندوز ۸

در این ویندوز شبکه‌های اجتماعی و خبرخوان‌ها جایگاه خاصی دارند و چندین نرم‌افزار برای کار با آن‌ها وجود دارد. شما می‌توانید به راحتی مطالب خود را با دیگران به اشتراک بگذارید.

شبکه‌های اجتماعی در ویندوز ۸

به همراه ویندوز چندین نرم‌افزار و بازی هم نصب شده است که می‌توانید با آن‌ها کار نمایید. به عنوان نمنه تصویر یکی از بازی‌ها در زیر آمده است.

نمونه‌ای از بازی‌های نصب شده به همراه ویندوز ۸

دسته‌ها:Persian Contents, Technology برچسب‌ها: , ,

XQuery چیست؟

سپتامبر 6, 2011 ۱ دیدگاه

XQuery چیست؟
 xml  یکی از آن مواردی بود که بسیار مورد علاقه تمامی برنامه‌نویسان قرار گرفت، دلیل این امر هم قالب ساده ارائه شده توسط آن برای ذخیره‌سازی و ارسال اطلاعات بود. قواعد مورد نظر برای ساخت یک ساختار xml به قدری ساده بود که باعث محبوبیت سریع آن شد.
حال فرض کنید که دارای یک فایل xml هستید که داده‌های مورد نظر شما در آن ذخیره شده است. برای تحلیل و بیرون کشیدن اطلاعات مورد نظر، راه‌های مختلفی وجود دارد، به عنوان مثال می‌توانید با زبان برنامه‌نویسی مورد علاقه خود یک parser برای این ساختارمتنی بنویسید و داده‌های مورد نظر خود را از داخل ساختار تودرتوی آن بیرون بکشید.
در اینجاست که XQuery می‌تواند وارد شده و کار شما را با قواعد خود، بسیار ساده کرده و شما را از دردسر نوشتن یک parser پیچیده خلاص کند.
XQuery  زبانی است که به برنامه‌نویسان اجازه کوئری زدن روی اطلاعات موجود در یک ساختار xml را می‌دهد. با استفاده از این زبان می‌توانید عناصر (element) و خصوصیات (attribute) آن در ساختار xml را شناسایی کرده و آن‌ها را استخراج نمایید XQuery از عبارات XPath برای مشخص کردن گره خاصی در xml استفاده کرده و آن گره را از اجزای دیگر مشتق می‌نماید. از آنجا که در خیلی موارد از ساختار xml برای ارسال و نگهداری داده‌ها استفاده می‌شود لذا  استفاده از این زبان می‌تواند بسیار مفید و پرکاربرد باشد.
در زیر می‌توانید برخی از موارد استفاده این زبان را ملاحظه فرمایید:
۱- تولید گزارش
۲- جستجوی پایگاه داده
۳- جدا کردن بخشی از عناصر xml و ساختن یک xml جدید
۴- تبدیل یک ساختار xml به XHTML
۵- …

XQuery  به صورت خلاصه در یک نگاه:
• XQuey  زبان کوئری زدن روی داده xml است
• XQuery  برای xml مانند SQL برای پایگاه داده‌هاست
• XQuery  بر اساس عبارات XPath ساخته شده است
• XQuery  توسط پایگاه داده‌های اصلی و مطرح پشتیبانی می‌شود
• XQuery  پیشنهادی از کنسرسیوم W3C می‌باشد

 

نمونه ساده‌ای از کاربرد XQuery :
فرض کنید که یک xml با ساختار زیر داشته باشید:

<bookstore>

<book category=»COOKING»>
  <title lang=»en»>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>31.00</price>
</book>
<book category=»CHILDREN»>
  <title lang=»en»>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

عبارت زیر که با زبان XQeury نوشته شده است روی تمام عناصر book می‌گردد و عنوان کتاب‌هایی را که دارای قیمت کمتر از ۳۰ می‌باشند را باز می‌گرداند :

for $x in doc(«books.xml»)/bookstore/book
where $x/price>30
order by $x/title
return $x/title

نحوه دیگر نوشتن کوئری می‌تواند به صورت زیر باشد :

doc(«books.xml»)/bookstore/book[price<30]

خروجی کوئری بالا به صورت زیر خواهد بود :

<book category=»CHILDREN»>
  <title lang=»en»>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

حال اگر عبارت زیر را اجرا کنیم می‌توانیم به نتیجه کوئری اول برسیم :

doc(«books.xml»)/bookstore/book[price>30]/title

اولین کوئری نوشته شده را  یک عبارت FLWOR می‌نامند. FLWOR مخففی از ابتدای عبارات For, Let, Where,Order by و Return می‌باشد.

دسته‌ها:#C, Persian Contents, SQL Server, XQuery برچسب‌ها: , , ,

CTE بازگشتی و ساختار آن

سپتامبر 2, 2011 بیان دیدگاه

CTE چیست؟

CTE یک مجموعه نتیجه موقتی دارای نام است که از یک کوئری ساده مشتق شده و می‌تواند در محدوده اجرای یک عبارت SELECT ، INSERT ، UPDATE و یا DELETE تعریف شود.
می‌توان به CTE مانند جایگزینی برای جداول مشتق شده (subquery)، View و توابعی که توسط کاربران تعریف شده، اندیشید. از مهمترین تفاوت‌های CTE با دیگر ساختارها می‌توان به این مورد اشاره کرد که می‌توان آن را به صورت بازگشتی استفاده کرد که این مورد برای ساختارهای درختی بسیار مفید خواهد بود.
از دیگر مزایای آن کپسوله‌سازی کد است. ما می‌توانیم یک روال را در CTE نوشته و چندین بار به آن ارجاع دهیم.

ساختار CTE بازگشتی
این ساختار شبیه ساختارهای بازگشتی در زبان‌های برنامه‌نویسی دیگر است. اگرچه توابع بازگشتی در زبان‌های دیگر فقط یک مقدار عددی را باز می‌گرداند ولی یک CTE بازگشتی می‌تواند چندین سطر را بازگرداند.
هر CTE بازگشتی شامل سه عنصر است :
۱- فراخوانی روال :
اولین فراخوانی CTE بازگشتی شامل یک یا چند CTE_query_deefinition است که توسط عملگرهای UNION ALL ، UNION ، EXCEPT یا INTERSECT به هم ملحق شده‌اند.
چون این تعاریف ساختار پایه‌ای CTE را تشکیل می‌دهند، آن‌ها را  به عنوان اعضای لنگر  (anchor) می‌شناسند. CTE_query_definition ها به عنوان اعضای لنگر در نظر گرفته می‌شوند مگر اینکه به خودشان ارجاع دهند. تعیف تمام اعضای لنگر کوئری باید قبل از تعریف اولین عضو بازگشتی قرار بگیرند و یک عملگر UNION ALL باید برای الحاق آخرین عضو لنگر و اولین عضو بازگشتی قرار گیرد.

۲- فراخوانی بازگشتی روال :
فراخوانی بازگشتی شامل یک یا چند CTE_query_definition می‌باشد که با عملگرهای UNION ALL که به خود CTE ارجاع می‌دهند، به هم ملحق شده‌اند.
این بخش کوئری به عنوان اعضای بازگشتی شناخته می‌شوند.

۳- شرط خاتمه :
این عملیات ، یک عملیات ضمنی (implicit) است. زمانی که هیچ سطری از فراخوانی قبلی باز نگردد، عملیات بازگشت خاتمه می‌یابد.

نکته : استفاده ناصحیح از این روش ممکن است باعث شود که یک چرخه بی‌نهایت تشکیل شود و کوئری ما با مشکل برخورد نماید.
ساختار CTE بازگشتی باید حداقل شامل یک عنصر لنگر و یک عنصر بازگشتی باشد. شبه کد زی با فرض این حداقل‌ها، ساختار اولیه را به ما نشان می‌دهد :

WITH     cte_name    (column_name[,…n])
AS
(
CTE_query_definition
UNION   ALL
CTE_query_definition
)
SELECT  *  FROM cte_name

مراحل اجرای عملیات بازگشتی به شرح زیر است:
۱- عبارت CTE به دو بخش عضو لنگر و عضو بازگشتی تقسیم می‌گردد.
۲- اعضای لنگر اجرا شده و اولین فراخوانی یا مجموعه نتیجه پایه (T(0)) را می‌سازد.
۳- اعضای بازگشتی اجرا می‌شود که T(i) ورودی و T(i+1) خروجی است.
۴- مرحله ۳ تا زمانی که مجموعه‌ای خالی بازگردانده شود تکرار می‌گردد.
۵- مجموعه نتیجه بازگردانده می‌شود. این مجموعه اجتماعی ازT(0) تا T(n) است.

WCF به زبان ساده

WCF فریمورکی برای ساخت نرم‌افزارهای مبتنی بر سرویس است. با استفاده از آن می‌توان پیام‌های غیرهمزمان را از یک نقطه پایانی سرویس به یک نقطه پایانی سرویس دیگر ارسال کرد. نقطه پایانی سرویس می‌تواند بخشی از یک سرویس باشد که به طور مداوم در دسترس و IIS میزبان آن است، یا می‌تواند سرویسی باشد که یک نرم‌افزار میزبان است. یک نقطه پایانی می‌تواند کلاینتی از یک سرویس سرویس باشد که از یک نقطه پایانی سرویس دیگر، درخواست داده کند. پیام‌ها می‌توانند به سادگی یک کاراکتر ساده و یا یک XML پیچیده ارسال شده باشند. این داده‌ها همچنین می‌توانند جریانی از داده‌ها باشند.
در زیر مثال‌های ساده‌ای از آن ارائه شده است :

  • یک سرویس امن برای پردازش تراکنش‌های تجاری
  • یک سرویس که داده‌هایی را برای دیگران مهیا می‌کند مانند یک گزارش ترافیکی یا سرویس‌های مونیتورینگ دیگر
  • یک سرویس چت که به دو نفر اجازه ارتباط و تبادل داده در لحظه را می‌دهد.
  • ظاهر ساختن یک گردش کاری پیاده‌سازی شده توسط WF به عنوان یک سرویس WCF
  • نرم‌افزار تهیه شده با silverlight برای راه‌اندازی سرویس برای نمایش آخرین فیدهای خبری

به طور خلاصه می‌توان گفت : WCF بدین منظور طراحی شده که راهکاری قابل مدیریت برای ساخت سرویس‌های وب و کلاینت‌های سرویس‌های وب ارائه داد.

دسته‌ها:#C, Persian Contents, WCF

stackoverflow و سایت‌های هم‌خانواده آن

نوامبر 16, 2010 ۱ دیدگاه

یکی دو سالیست که سایتی با نام stackoverflow در عرصه‌ی سایت‌های تخصصی برای پرسش و پاسخ در رابطه با مسائل برنامه‌نویسی می‌درخشد. این سایت به قدری اعتبار پیدا کرده که سوالات ان بلافاصله در گوگل ایندکس می‌شودِ یعنی درست بلافاصله پس از پرسیدن یک سوال، می‌توان آن را در گوگل جستجو کرد و آن را دید.

این نرم‌افزار بسیار خلاقانه و با کارایی بالا نوشته شده است. برای نوشتن این برنامه از تکنولوژی ASP.Net MVC نوشته شده است. سناریوی تهیه شده برای پرسش و پاسخ در این وب سایت به قدری عالی و خلاقانه طراحی شده که تمام کاربران آن را به دادن پاسخ‌های سریع و دقیق ترغیب می‌کند. معمولا هر سوالی که در آن از بقیه کاربران بپرسید پس از چند دقیقه به پاسخ‌های خوبی دست خواهید یافت. این سایت مورد توجه متخصصان زیادی از سراسر دنیا می‌باشد.

نحوه کار در این سایت به گونه‌ای است که برای هر فعالیتی امتیازاتی از طرف کاربران و خود سایت به شما داده می‌شود. به عنوان مثال برای هر سوالی که بپرسید و سوال شما سوال خوبی باشد، کاربران می‌توانند به سوال شما رای بدهند به ازای هر رای برای سوال خوب ۵ امتیاز، برای هر پاسخ مناسب ۱۰ امتیاز و برای هر جوابی که از طرف شخص سوال‌کننده به عنوان پاسخ سوالش انتخاب شود ۱۵ امتیاز کسب می‌شود. خود سایت هم دارای مدال‌هایی با رنگ‌های طلایی، نقره‌ای و برنزی می‌باشد. این موارد به صورت خودکار محاسبه می‌شود و به شما مدال‌هایی با نام‌های مختلف داده می‌شود. به عنوان مثال اگر سوالی بپرسید که بیش از ۱۰۰۰ بار دیده شود، یک مدال برنز با عنوان popular question به شما داده می‌شود. به همین ترتیب مدال‌های دیگری با رنگ‌های دیگر به شما اعطا خواهد شد.

این سایت به تازگی بخشی هم برای گفتگوی آنلاین کاربران راه‌اندازی کرده است، به طوری که می‌توانید به صورت آنلاین در اتاق‌های تخصصی آن با دیگر متخصصان گفتگو نمایید.

از آنجا که کارایی و ایده این سایت بسیار جالب بوده است، سایت‌های هم خانواده‌ای برای آن ساخته شده است که لزوما در زمینه برنامه‌نویسی نیستند. از جمله این ساایت‌ها می‌توان به موارد زیر اشاره کرد :

 

۱- http://serverfault.com : این سایت از اولین نمونه‌هاست، اگر مشکلاتی در رابطه با پیکربندی سرورهای مختلف دارید می‌توانید در این سایت به پاسخی دست یابید و مشکل خود را حل کنید.

۲- http://superuser.com : این سایت مربوط است به پرسش و پاسخ برای تمام مشتاقان کامپیوتر در هر ضمینه و در هم پلتفرمی.

۳- http://webapps.stackexchange.com : این سایت برای متخصصینی که در ضمینه طراحی و پیاده‌سازی نرم‌افزارهای تحت وب کار می‌کنند، پیاده سازی شده است.

۴- http://area51.stackexchange.com : این سایت برای کسانی است که علاقه دارند که سایت‌هایی از خانواده stackoverflow بسازند. در این سایت می‌توان پیشنهاداتی را برای ساخت سایت‌های هم خانواده ارائه داد.

۵- http://webmasters.stackexchange.com : این سایت به وب‌مسترها کمک می‌کند تا سوالات خود را در رابطه با نگهداری و پیشبرد وب سایت خود بپرسند.

۶- http://gamedev.stackexchange.com : اگر سوالی در رابطه با توسعه بازی‌های کامپیوتری داشتید، می‌توانید از این سایت استفاده کنید.

۷- http://askubuntu.com : در این سایت هر سوالیکه در ضمینه کار با سیستم عامل اوبونتو داشته باشید پاسخ داده می‌شود. دوستانی که از ایم سیستم عامل متن‌باز استفاده می‌کنند می‌توانند کمک زیادی از این سایت بگیرند.

۸- http://math.stackexchange.com : این سایت یکی از موارد مورد علاقه بنده است. در این سایت متخصصین زیادی گرد هم آمده‌اند و به سوالات ریاضی پاسخ می‌دهند و در ضمینه‌های گوناگون علم شیرین ریاضیات تبادل نظر می‌کنند.

۹- http://stats.stackexchange.com : این هم سایتی برای بچه‌های رشته آمار و ریاضی. در این سایت سوالات مربوط به تحلیل‌های آماری پاسخ داده می‌شوند.

۱۰- http://photo.stackexchange.com : جمعی از متخصصین عکاسی این سایت را راه‌اندازی کرده‌اند که بتوانند به آموزش این هنر بسیار زیبا بپردازند. من یکی از علاقه‌مندان پر و پا قرص عکاسی هستم.

۱۱- http://english.stackexchange.com : اگر سوالی در رابطه با زبان انگلیسی و کاربرد آن دارید این سایت به شما توصیه می‌شود. سوالات گرامری، معناشناسی، نوشتاری و … در رابطه با زبان انگلیسی را در این سایت بپرسید. از آنجا که آموزش زبان انگلیسی در کشور ما، طرفداران زیادی دارد لذا این سایت یکی از پرکاربردترین این سایت‌ها می‌تواند باشد.

۱۲- http://cooking.stackexchange.com : این هم سایتی برای آموزش آشپزی که از هم خانواده‌های سایت‌های بالا می‌باشد.

۱۳- http://gaming.stackexchange.com : اگر از علاقه‌مندان بازی‌های کامپیوتری هستید و در جایی از بازی به مشکلی برخورد کردید، این سایت را به خاطر داشته باشید.

۱۴- http://www.danatarin.com : این هم یک عضو فارسی زبان این خانواده که به پرسش و پاسخ درباره بحث‌های مختلف مربوط به حوزه IT می‌پردازد.

 

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

چه زمانی برای تولید کوئری در Entity Framework از Entity SQL استفاده نماییم؟

نوامبر 15, 2010 بیان دیدگاه

در ادامه مطلب قبلی با عنوان «روش‌های موجود برای کوئری زدن روی مدل مفهومی در EF» بد ندیدم که این مطلب را در رابطه با زمان استفاده از Entity SQL بنویسم. لطفا به آن توجه نمایید.

۱- زمانی که نیاز داریم یک کوئری در زمان اجرا (runtime) به صورت پویا ساخته شود. البته در این موارد می‌توان از متدهای سازنده کوئری‌ها هم استفاده کرد.

۲- زمانی که می‌خواهید یک کوئری را به عنوان بخشی از تعریف مدل استفاده کنید.

نکته مهم: فقط استفاده از Entity SQL در مدل داده‌ای مجاز است، یعنی می‌توان یک کوئری را به عنوان بخشی از مدل تعریف کرد.

۳- زمانی که از Entity Client برای بازگرداندن یک موجودیت داده‌ای به عنوان مجموعه‌ای از سطرها (rowset) با استفاده از EntityDataReader استفاده کنیم.

۴- اگر یک متخصص حرفه‌ای در زبان SQL هستیم، این زبان برای ما بسیار ساده به نظر خواهد رسید.

دسته‌ها:#C, Entity Framework, Persian Contents برچسب‌ها: ,

دستورالعمل‌های پیش‌پردازشی #C چیستند؟

اکتبر 7, 2010 7 دیدگاه

دستورالعمل‌های پیش‌پردازشی به ما این قابلیت را می‌دهند که به صورت شرطی عملیات کامپایل کردن را انجام دهیم یعنی قابلیت نادیده گرفتن شرطی بخشی از فایل‌های منبع، قرار دادن شرط برای تولید خطا و هشدار، و مشخص کردن بخشی مجزا از کد منبع را برای ما مهیا می‌کنند. واژه «دستورالعمل‌های پیش‌پردازشی» فقط برای همسانی با زبان‌های برنامه‌نویسی C  و ++C به کار برده شده‌اند. در #C هیچ مرحله مجزایی به عنوان مرحله قبل از پردازش وجود ندارد و این دستورالعمل‌ها در بخشی از فاز تحلیل لغوی (lexical analysis phase) زبان، پردازش می‌شوند.

 

در #C دستورالعمل‌های پیش‌پردازشی زیر موجود هستند:

۱- define# و undefine# : به ترتیب برای تعریف و حذف کردن علامت‌های قابل فهم برای کامپایل شرطی استفاده میذشوند.

۲- if# و elif# و else# و endif# : این‌ها عباراتی هستند که با استفاده از آن‌ها می‌توانیم به صورت شرطی به کامپایلر بفهمانیم که بخشی از کد منبع را در عملیات کامپایل کردن نادیده بگیرد.

۳-  line# : که برای کنترل کردن شماره خطوطی که برای خطاها و هشدارها منتشر شده‌اند.

۴- error# و warning# : به ترتبب برای صادر کردن خطاها و هشدارها استفاده می‌شوند.

۵- region# و endregion# : برای مشخص و مجزا کردن بخشی از کد منبع باشد.فکر میکنم از این دستورالعمل بیش از بقیه استفاده می‌شود.

 

به تکه کد زیر دقت کنید :

#define A
#undef B
class C
{
#if A
void F() {}
#else
void G() {}
#endif
#if B
void H() {}
#else
void I() {}
#endif
}

این تکه کد در زمان کامپایل معادل کد زیر کامپایل می‌شود :

class C
{
void F() {}
void I() {}
}

این دو اگرچه از لحاظ لغوی کاملا با هم متفاوتند ولی از دید قواعد نحوی کاملا معادل یکدیگر می‌باشند.

در اینجا برای فهم بهتر کامپایل شرطی مثالی می‌زنم تا موضوغ قابل فهم‌تر باشد. فرض کنید می‌خواهیم یکی از سرویس‌های نوشته شده توسط ما، در یکی از dll های برنامه‌مان به صورت شرطی دو رفتار مختلف نشان دهد. مثلا این سرویس باید برای دو شرکت خریدار محصول ما متفاوت باشد و برای هر کدام نیاز داریم یک dll مجزا تولید کنیم، در عین حال نمی‌خواهیم به ازای هر کدام یک متد جدا داشته باشیم، در اینجا می‌توانیم از دستورالعمل if# و else# و endif# استفاده کنیم و کامپایل شدن dll را به یک پارامتر وابسته نماییم. این پارامتر را هم می‌توان به کمک define# تعریف کرد و هم می‌توان از بخش properties مربوط به پروژه که به یک dll تبدیل خواهد شد این کار را انجام داد. برای روش دوم باید از صفحه ظاهر شده روی لبه‌ی Build کلیک کرد و در بخش Conditional compilation symbols آن را تعریف می‌کنیم، مثلا می‌توانیم از نام شرکت مورد نظر به عنوان این علامت استفاده کرد.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.