همه چیز درباره زبان برنامه‌نویسی جدید اپل

در طول مراسم WWDC 2014، همانطور می‌دانید، شرکت اپل زبان برنامه‌نویسی جدیدی را با نام «سویف» (Swift) ابداع کرد. زبان سویفت قرار است که یک زبان ساده باشد و استفاده از آن به‌راحتی صورت گیرد تا فرآیند توسعه نرم‌افزار با سرعت بیشتری انجام شود و آن پیچیدگی‌های سابق XCode را نداشته باشد.

در طول سال‌های گذشته، شرکت اپل با استفاده از مستندات و ابزارهایی که در اختیار توسعه‌دهندگان نرم‌افزار قرار میداد، سعی بر آن داشت که برنامه‌نویسی را ساده‌تر نماید، اما بهرحال، زبان Objective-C و محیط XCode پیچیدگی‌های خاص به خودشان را داشتند. همه این‌ها با هم باعث می‌شد تا افرادی که گزینه‌های دیگری برای توسعه نرم‌افزار داشته باشند را از خود به دور کند. حتی اگر شما یک برنامه‌نویس وتوسعه‌دهنده حرفه‌ای نرم‌افزار باشید، ممکن است خود را در محیط مزاحم XCode ببینید.

swift

swift

  • دستورات نحوی زیاد در Objective-C:

قصد و هدف شرکت اپل از ابداع زبان Swift، از بین بردن نگرانی‌های ناشی از دستورات نحوی نگران‌کننده هست و بجای آن، بیشتر تمرکز خود را به بخش منطق برنامه‌نویسی منعطف کند. طبق گفته‌ی شرکت اپل، زبان Swift به منظور امنیت و مدیریت خودکار حافظه ایجاد شد. همچنین، این زبان بطور کامل از یونیکدها (Unicodes) در کارکترهای خود پشتیبانی می‌کند.

  • یکپارچه‌سازی با Objective-C:

اگر با زبان Objective-C آشنایی دارید، شما یک خوش‌شانس هستید! زبان Swift به‌نحوی ایجاد شده که با برنامه‌های نوشته شده توسط Objective-C نیز هماهنگ باشد، بنابراین می‌بایست که همه برنامه‌های شما را با پروژه‌های Objective-C یکپارچه شود.

02_swift

اپل می‌گوید که ابداع این زبان حاصل ساعت‌ها تحقیق و مطالعه در رابطه با این که توسعه‌دهندگان چه چیزهایی را دوست دارند و نسبت به چه چیزهایی بی‌علاقه هستند.

سویفت، زبان برنامه‌نویسی مدرن برای توسعه‌دهندگان مدرن است.

—اپل

  • اصلی‌ترین ویژگی جدید سویفت – Playground (=زمین بازی)

ویژگی جدید و زیبای زبان برنامه‌نویسی جدید اپل، یعنی سویفت، که باعث شد خیلی از توسعه‌دهندگان در مورد آن صحبت کنند، ویژگی Playground و یا همان زمین‌بازی است. این ویژگی به توسعه‌دهندگان این قابلیت را می‌دهد که در همان لحظه‌ای که در حال کدنویسی هستند، نتیجه کدهای خود را در در کنار کدهای خود ببینند؛ در واقع بصورت همزمان، کد بزنید و نتیجه را در همان آن مشاهده کنید. دیگر لازم نیست برنامه را مجدد و مجدد کامپایل (Compile) کنید.

03_Swift-Programming-Lanuguage-XCode6

  • سویفت – امنیت و راحتی در کار

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

به نمونه‌های زیر توجه کنید؛ برای تنها چاپ عبارت “Hello, World!” در زبان Objective-C، چند خط کد لازم است:

04_Swift-Programming-Lanuguage-Obj-C

اکنون نگاه کنید که همین کار در زبان سویفت، چگونه صورت می‌گیرد:

println(“Hello, world!”)

به همین راحتی!

سویفت همچنین می‌تواند خطاهای موجود در کدها را پیش از آنکه به مرحله پایانی توسعه برسد، پیدا کند. اینکار باعث می‌شود که برنامه‌هایی که توسط توسعه‌دهندگان از این پس توسعه داده می‌شود، از پایداری بیشتری برخوردار باشد. توسعه‌دهندگان می‌توانند برنامه‌های مخصوص سیستم‌عامل‌های iOS و OS X را که توسط زبان سویفت ایجاد شده‌اند را برای بازبینی و ثبت در App Store ارسال نمایند؛ البته دقت کنید ثبت کردن برنامه‌ها بعد از انتشار نسخه‌های جدید سیستم‌عامل‌های اپل که این پاییز می‌باشد، امکان‌پذیر خواهد بود.

05_Swift-Programming-Lanuguage-Keynote

افرادی که تمایل به یادگیری زبان سویفت هستند (خصوصاً توسعه‌دهندگان تازه وارد)، شرکت اپل برای آن‌ها یک کتابچه راهنما در فروشگاه iBook خود بصورت رایگان قرار داده که از هم‌اکنون می‌توان آن را دریافت کرد.

06_Swift-Programming-Lanuguage-iBooks


برچسب‌ها: همه چیز درباره زبان برنامه نویس جدید اپل
+ نوشته شده در پنجشنبه بیست و چهارم مهر 1393ساعت 14:31 توسط نیلوفر جمشیدی |


اصل مطلب

برای این که مقاله مفید واقع شود ، فردی را تصور کنید که می خواهد یک پروژه (تفاوتی نمی کند در چه زمینه باشد) را اجرا کند. این فرد مبانی برنامه نویسی را گذرانده ولی آشنایی با زبانی که قرار است این پروژه به وسیله آن انجام شود و همچنین تکنولوژی های مرتبط با آن را را ندارد. چه باید بکند؟ از کجا باید شروع کند؟ منابع آموزشی مورد نیازش را از کجا باید تامین کند؟ و ...

  1. برای شروع لازم است یک مرجع سریع تهیه کند. از کجا؟ اگر آشنایی با زبان انگلیسی نداشته باشد مجبور است سری به کتاب فروشی های داخلی بزند و دنبال کتاب های کم حجم در رابطه با زبان مورد نظرش بگردد. کتاب هایی که با پیشوند یا پسوند عناوینی مثل "مرجع سریع" ، "آموزش گام به گام" ، "در چند قدم" ، "برای مبتدی ها" ، "آموزش در 21 روز" ، "آموزش در یک هفته" و ... همراه هستند از دسته مراجع سریع هستند. مراجع سریع معمولا چیزی حدود 100 صفحه هستند.
    در صورتی که با زبان انگلیسی آشنا باشد خیلی عالی است چون می تواند از کتاب ها و منابع الکترونیک استفاده کند. استفاده از این منابع چند مزیت دارد :
    1. به روز هستند.
    2. با ترجمه عجیب و غریب مترجمان ایرانی خراب نشده!
    3. در هر زمینه این بالاخره یک چیزی می تواند پیدا کند.
    4. هزینه زیادی را صرفه جویی کرده.
    5. مطمئن است برای کم کردن حجم آن چیزی از کتاب زده نشده است!
    6. می تواند از امکان جستجو استفاده کند که صرفه جویی زیادی در زمان به همراه دارد.
    برای پیدا کردن منابع مورد نظرش باید از اینترنت و یکی از موتورهای جستجو استفاده کند. می تواند از لغات کلیدی با ترکیب زیر استفاده کند که در همه آن ها x نام زبان برنامه نویسی یا تکنولوژی مورد نظر است (این موارد تنها نمونه هستند ، می تواند بسته به نیاز خود تکریبات جدیدی نیز اضافه کند) :
    pdf x
    chm x
    reference manual x
    x complete reference
    step by step guide
    beginner x for
    tutorial x
    x fast reference
    ...
    دو فرمت PDF (Portable Document Format - Acrobat Reader software) و CHM (Compiled HTML Help - Compatible with Windows Operation System) معمولا برای کتب الکترونیکی مورد استفاده قرار می گیرند که با اضافه کردن یکی از این دو فرمت به رشته جستجو سریع تر به مقصود می رسد.
  2. چند روزی را باید صرف مطالعه کامل این مرجع سریع کند. این مطالعه حتما باید سطحی باشد و نیازی به تمرین مطالب گفته شده در کتاب و حفظ کردن (حفظ اخ) آن ها نیست. تنها قدری تامل کفایت می کند. بعد از این مرور سطح چه چیزهایی به دست می آورد :
    1. نگرانیش کم می شود و بسیاری از مجهولاتی که در ذهنش نسبت به کار وجود دارد از بین می رود.
    2. متوجه می شود که چه امکاناتی در اختیار دارد و کجا باید از این امکانات استفاده می کند.
    3. اگر فردی با ضریب هوشی معمولی به بالا باشد ، در موقع مطالعه کتاب قسمتی از نقشه (Plan) پروژه در ذهنش نقش می بندد که در موقع شروع کار بسیار کمک خواهد کرد.
    4. حالا می داند هر کدام از مطالبی که نیاز دارد را کجای کتاب می تواند پیدا کند.

برچسب‌ها: رمز موفقیت در برنامه نویسی, برای تازه کارها
+ نوشته شده در پنجشنبه بیست و چهارم مهر 1393ساعت 14:27 توسط نیلوفر جمشیدی |

آموزش: چگونه فولدر دلخواه را رمزگذاری کنیم

Winrar

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

کاملا منطقی است که این سئوال برای بسیاری از کاربران پیش بیاید. چراکه ویندوز هیچ راه مفیدی برای رمزگذاری فولدرها ارائه نکرده است. یکی از بهترین روش ها فشرده سازی فایل یا فولدرها و رمز گذاری برروی فایل فشرده است.

شما می توانید فایل و فولدر های شخصی خود را توسط برنامه های مختلف فشرده و رمزگذاری کنید. یکی از بهترین نرم افزارهای فشرده سازی که محبوبیت بسیار زیادی نیز دارد، WinRar است. شما می توانید این برنامه رایگان و بسیار مفید را از وب سایت RarLab دریافت کنید.

پس از نصب این برنامه، با کلیک راست کردن روی هر فولدر، گزینه Add to archive را انتخاب کنید. در پنجره ای که باز می شود، برگه Advanced را انتخاب کنید و روی دکمه Set Password کلیک کنید تا رمز عبور مورد نظر را اعمال کنید. هر بار که نیاز داشته باشید فولدر را باز کنید باید روی آن کلیک راست کرده و گزینه Extract را بزنید تا پس از وارد کردن رمز عبور، فایل زیپ مجددا به شکل فولدر تبدیل شود. به خاطر داشته باشید پس از فشرده و رمزگذاری فایل یا فولدرهای مورد نظر می بایست اصل فایل یا فولدرهای را حذف کنید و از فایل فشرده استفاده نمایید.

از دیگر برنامه هایی که می تواند نیاز شما را برطرف کند، برنامه 7-Zip است.

البته اگر دوست ندارید فولدر های شما به حالت زیپ و فشرده در بیایند می توانید از برنامه Folder Lock یا Protected Folder استفاده کنید. برای خرید برنامه باید هزینه کنید ولی در سایت های مختلف می توانید برنامه Crack شده این دو نرم افزار را تهیه کنید. این برنامه ها، فایل های شما را زیپ نمی کنند و تنها روی آنها Password قرار می دهد.

اگر سئوالی در مورد هر کدام از برنامه ها دارید و یا پیشنهاد بهتری برای قفل گذاشتن روی فولدر ها دارید، پیشنهاد خود را در بخش نظرات، برای ما ارسال کنید.

+ نوشته شده در دوشنبه بیست و هفتم آذر 1391ساعت 14:48 توسط نیلوفر جمشیدی |

 

همه چیز در مورد سیستم عامل آندروید

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


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

به نوشته ی هومن کبیری،  رشد اعجاب‌آور آندروید به گونه‌ای بوده است که بسیاری از کارشناسان پیش‌بینی می‌کنند این سیستم عامل تا سال ۲۰۱۲ دومین سیستم عامل پرطرفدار تلفن‌های همراه جهان خواهد بود. تخمینی که نه تنها دور از دسترس نمی‌نماید بلکه بسیار محافظه‌کارانه به شمار می‌رود. چرا که با روند رشد این سیستم عامل و اقبال شرکت‌های مختلف به آن، کسب رتبه اول نیز برای آندروید چندان دور از ذهن نیست. مروری خواهیم داشت بر تاریخچه و روند شکل‌گیری این سسیتم عامل، موفقیت‌ها و چشم‌انداز آتی آن.

معنای آندروید
پیش از ورود به اطلاعات مربوط به آندروید، نخست به نام آن می‌پردازیم. بنابر ترجمه دیکشنری کمبریج، آندروید این گونه تعریف شده است: «یک ربات (ماشینی که به وسیله کامپیوتر کنترل می‌شود) که به گونه‌ای ساخته شده تا شکل ظاهری شبیه به انسان داشته باشد.» شاید بتوان نزدیک‌ترین معنی در زبان فارسی به آندروید را آدم آهنی یا آدم ماشینی دانست.

از مدیریت شرکت کوچک آندروید تا مدیریت پروژه در خلاق‌ترین شرکت جهان
در ماه ژوئیه سال ۲۰۰۵ گوگل شرکت آندروید در پالو آلتوی کالیفرنیا را خرید. شرکت کوچک آندروید که توسط اندی روبین، ریچ ماینرز، نیک سیرز و کریس وایت پایه‌گذاری شده بود، در زمینه تولید نرم‌افزار و برنامه‌های کاربردی برای تلفن‌های همراه فعالیت می‌کرد. اندی روبین مدیر ارشد اجرایی این شرکت پس از پیوستن آندروید به گوگل به سمت قائم‌مقام مدیریت مهندسی این شرکت و مسئول پروژه آندروید در گوگل منصوب شد.

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

تیم آندروید به رهبری روبین فعالیت خود را برای تولید پلتفرم موبایل مبتنی بر کرنل لینوکس آغاز کردند. درز اخباری از فعالیت‌های این تیم به خارج از گوگل، سبب بروز شایعاتی مبنی بر تمایل گوگل به تولید تلفن همراه در اواخر سال ۲۰۰۶ گردید. این شایعات زمانی بیشتر قوت گرفت که در سپتامبر ۲۰۰۷ نشریه اینفورمیشن ویک در گزارشی خبر از ثبت چندین حق امتیاز و اختراع در حوزه تلفن همراه توسط گوگل داد.

تولد یک آدم آهنی!
با اعلام زمان کنفرانس خبری شرکت گوگل در نوامبر سال ۲۰۰۷ دیگر تمامی رسانه‌ها و افکار عمومی جهان چشم انتظار مشاهده نخستین تلفن همراه ساخت گوگل بودند. ولی غافلگیری بزرگ رخ داد. هیچ خبری از «یک» گوشی تلفن همراه نبود بلکه خبر داغ آن روز در مورد ورود صدها تلفن همراه در سال‌های پیش رو بود که توسط شرکت‌های مختلف تولید می‌شد. «اتحادیه گوشی باز» یا Open Handset Alliance در روز ۵ نوامبر ۲۰۰۷ اعلام موجودیت کرد.

۳۴ شرکت فعال در زمینه تولید نرم‌افزار، تولید گوشی‌های تلفن همراه، اپراتور تلفن همراه و تولید کننده نیمه رساناها و پردازنده‌های تلفن همراه اعضای مؤسس این اتحادیه بودند. در میان نام‌های مشهور در بین اعضای مؤسس، شرکت‌هایی چون سامسونگ، LG، موتورولا، HTC، T-Mobile، NTT DoCoMo، اینتل، Nvidia، تگزاس اینسترومنتس، کوآلکام، برادکام، تلفونیکا، اسپرینت، eBay و البته گوگل به چشم می‌خوردند. اریک اشمیت مدیر ارشد اجرایی گوگل در این مراسم گفت: «اعلام امروز بسیار جاه‌طلبانه‌تر از معرفی تنها «یک» تلفن گوگلی است که در چند هفته اخیر توسط رسانه‌ها پیش‌بینی شده بود.

از دیدگاه ما پلتفرمی که ما ارائه کرده‌ایم، هزاران تلفن گوناگون را به بازار روانه خواهد کرد.» نخستین گوشی مبتنی بر آندروید توسط شرکت HTC با همکاری T-Mobile تولید شد. این گوشی که به فاصله کمتر از یک سال از تشکیل اتحادیه Open Handset Alliance یعنی در ۲۲ اکتبر ۲۰۰۸تولید شد، در بازارهای مختلف به نام‌های HTC Dream، T-Mobile G1 و Era G1 به بازار عرضه گردید.

آدم آهنی تقویت می‌شود
نهم دسامبر ۲۰۰۸ روز تاریخی دیگری برای آندروید بود. در این روز ۱۴ عضو جدید از نام‌های معروف صنعت تلفن همراه جهان به اتحادیه Open Handset Alliance پیوستند. در بین این نام‌ها باید به سونی اریکسون، اریکسون، توشیبا، آسوس، گارمین، هوآوی و آرم اشاره کرد. روند پیوستن شرکت‌های بزرگ به اتحادیه تا به امروز نیز ادامه داشته است و شرکت‌هایی چون ایسر، آلکاتل، لنوو، شارپ، فاکسکان، NEC، کیوسرا، NXP، ST-Ericsson، مارول، ZTE و دل نیز از جمله شرکت‌هایی بوده‌اند که به جمع پشتیبانی کنندگان آندروید پیوسته‌اند.

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

ویرایش‌های آندروید با طعم شیرینی‌جات و دسرها!
گوگل ویرایش‌های گوناگون آندروید را علاوه بر شماره ویرایش با نام یک شیرینی یا دسر معرفی می‌کند. این نام البته از ترتیب حروف الفبا برای حرف اول آن نام نیز پیروی می‌کند به گونه‌ای که ویرایش‌های منتشر شده آندروید تا به امروز به این نام‌ها بوده‌اند:

Cupcake که نوعی کیک کوچک شبیه به کیک یزدی ایرانی است ولی با اندازه‌ای کمی بزرگ‌تر برای ویرایش ۵/۱ آندروید، Donut که در ایران هم به همان نام شهرت دارد و نوعی پیراشکی محسوب می‌شود، برای ویرایش ۶/۱، Éclair که نوعی شیرینی خامه‌ای است شبیه به لطیفه ولی با اندازه بزرگ‌تر برای ویرایش‌های ۲ و ۱/۲، Froyo (مخفف Frozen yogurt ) نوعی دسر است که با ماست یخ زده تهیه می‌شود برای ویرایش ۲/۲٫ نام ویرایش بعدی آندروید هم Gingerbread یا نان زنجفیلی گذاشته شده است. همان گونه که مشاهده می‌شود ترتیب نام‌های شرینی‌ها و دسرها بر اساس حروف الفبا است. حالا که طعم این ویرایش‌ها را چشیدیم شاید بهتر باشد سری هم به ویژگی‌های فنی آنها بزنیم.

 


ادامه مطلب
+ نوشته شده در دوشنبه بیست و هفتم آذر 1391ساعت 14:43 توسط نیلوفر جمشیدی |

 

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

  • نسل اول زبان ماشین - زبان صفرو یک
  • نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
  • نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
  • نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاوره‌های انسانی
  • نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط برنامه نویس

یک زبان برنامه نویسی یک زبان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده‌است.زبان‌های برنامه نویسی برای ایجاد برنامه‌هایی به کار می‌روند که رفتار یک ماشین را مشخص می‌کنند، الگوریتم دقیق را بیان می‌کنند، و یا روشی برای ارتباط انسانند. بسیاری از زبان‌های برنامه نویسی تعدادی قالب از ویژگی‌های نوشته شده دستوری(syntax) و معناشناسی (semantics) دارند، چرا که رایانه‌ها دستورات دقیقا مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده‌اند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی می‌باشند.(مانند Perl) اولین زبان برنامه نویسی به قبل از اختراع رایانه باز می‌گردد، و برای هدایت رفتار ماشین‌هایی مانند دستگاه‌های نساجی اتوماتیک و نوازنده‌های پیانو به کار می‌رفت. هزاران زبان برنامه نویسی خلق شده‌اند، بیشتر در زمینهٔ رایانه، زمینه‌ای که هر ساله بسیاری دیگر ایجاد می‌شوند.

تقسیم‌بندی

زبان‌های برنامه نویسی را می‌توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد: الف)روش‌های برنامه نویسی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه نویسی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)


تعاریف

ویژگی‌هایی که غالبا برای تشکیل یک زبان برنامه نویسی مهم شمرده می‌شوند:

  • تابع :یک زبان برنامه نویسی، زبانی است که برای نوشتن برنامه‌های رایانه‌ای به کار می‌رود که رایانه‌ای را برای انجام محاسبات یا اجرای الگوریتم و یا احتمالا کنترل دستگاه‌های خارجی مثل چاپگر، ربات و... درگیر می‌کنند.
  • هدف: زبان‌های برنامه نویسی با زبان‌های طبیعی تفاوت دارند و آن اینکه زبان‌های طبیعی فقط برای فعل و انفعالات بین مردم به کار می‌روند، در حالیکه زبان‌های برنامه نویسی همچنین به انسانها اجازه می‌دهد که از طریق دستورات با ماشین‌ها ارتباط برقرار کنند. برخی زبان‌های برنامه نویسی بوسیله یک دستگاه استفاده می‌شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه‌های پست اسکریپت(post script) غالبا توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد می‌شوند.
  • ساختارها: زبان‌های برنامه نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
  • توان بیانگر: نظریه محاسبات، زبان‌ها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی می‌کند. تمام زبان‌های "کامل تورینگ" می‌توانند مجموعه یکسانی از الگوریتم‌ها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثال‌هایی هستند از زبان‌هایی که کامل تورینگ نیستند، ولی غالبا زبان برنامه نویسی نامیده می‌شوند.

برخی مولفین اصطلاح" زبان برنامه نویسی" را محدود به آنهایی می‌کنند که می‌توانند تمام الگوریتم‌های ممکن را پیاده سازی کنند، گاهی اوقات اصطلاح" زبان رایانه" برای زبان‌های برنامه نویسی محدودتر به کار می‌رود. زبان‌های غیر محاسباتی، مانند زبان‌های مارک آپ(markup) HTML یا گرامرهای قراردادی مثل BNF، معمولاً زبان برنامه نویسی محسوب نمی‌شوند. یک زبان برنامه نویسی(که می‌تواند کامل تورینگ نباشد) ممکن است در این زبان‌های غیر محاسباتی (میزبان) تعبیه شوند.

کاربرد

زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف داده‌ها، و عملیات یا تبدیل‌هایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم می‌کند. یک برنامه نویس از انتزاعات آماده در زبان استفاده می‌کند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از ساده‌ترین عناصر موجود بیان می‌شوند(مفاهیم ابتدایی نامیده می‌شوند). زبان‌های برنامه نویسی با غالب زبان‌های انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبان‌های طبیعی برای ارتباط با دیگر انسان‌ها، نویسندگان و گویندگان می‌توانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانه‌ها "دقیقا آنچه که به آنها گفته شده را انجام می‌دهند." و نمی‌توانند "بفهمند" که نویسنده دقیقا چه کدی مد نظر نویسنده بوده‌است] البته امروزه برنامه‌هایی برای انجام این کار تولید شده‌اند و تلاش‌های بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص می‌کند. برنامه‌های یک رایانه ممکن است در یک فرآیند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامه‌ها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامه‌ای استفاده می‌شود، زبان اسکریپت می‌گویند. بسیاری از زبان‌ها کنار گذاشته شده‌اند، برای رفع نیازهای جدید جایگزین شده‌اند، با برنامه‌های دیگر ترکیب شده‌اند و در نهایت استعمال آنها متوقف شده‌است. با وجود اینکه تلاش‌هایی برای طراحی یک زبان رایانه" کامل" شده‌است که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبان‌های رایانه‌ای گسترده از گستردگی زمینه‌هایی که زبان‌ها استفاده می‌شوند، ناشی می‌شود: • محدوده برنامه‌ها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستم‌های بسیار بزرگ نوشته شده توسط صدها برنامه نویس است • توانایی برنامه نویس‌ها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفه‌ای‌هایی که با پیچیدگی قابل توجهی کنار می‌آیند. • برنامه‌ها باید سرعت، اندازه و سادگی را بسته به سیستم‌ها از ریزپردازندها تا ابر رایانه‌ها متناسب نگه دارند. • برنامه‌ها ممکن است یک بار نوشته شوند و تا نسل‌ها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند. • در نهایت، برنامه نویس‌ها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.

المان‌ها

تمام زبان‌های بزنامه نویسی تعدادی بلوک‌های ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف می‌شوند که ساختار و معنای مربوطه را توضیح می‌دهند.

دستور(syntax)

فرم سطحی یک زبان برنامه نویسی دستور آن نامیده می‌شود. غالب زبان‌های برنامه نویسی کاملا متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده می‌کنند. از طرف دیگر، برنامه‌هایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبل‌ها برای مشخص کردن برنامه استفاده می‌کنند. دستور یک زبان ترکیبات ممکن سمبل‌ها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص می‌کند. معنایی که به یک ترکیب سمبل‌ها داده می‌شود با معناشناسی اداره می‌شود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبان‌ها متنی هستند، این مقاله دستور متنی را مورد بحث قرار می‌دهد.

دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف می‌شوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom  ::= number | symbol number  ::= [+-]?['۰'-'۹']+ symbol  ::= ['A'-'Za'-'z'].* list  ::= '(' expression* ')' این گرامر موارد ذیل را مشخص می‌کند:

  • یک عبارت یا atom است و یا یک لیست
  • یک atom یا یک عدد است و یا یک سمبل
  • یک عدد دنباله ناشکسته‌ای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی می‌تواند پیش از آن بیاید.
  • یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) می‌آید.
  • یک لیست تعدادی پرانتز است که می‌تواند صفر یا چند عبارت در خود داشته باشد.

"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثال‌هایی هستند از دنباله‌های خوش فرم در این گرامر.

همه برنامه‌هایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامه‌های درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامه‌هایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقا مطلوب نویسنده آن نبوده باشد.

به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اتلاق کرد و یا ممکن است جمله نادرست باشد:

  • "ایده‌های بی رنگ سبز با خشم می‌خوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
  • "جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان می‌کند که نمی‌تواند درست باشد.

این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام می‌دهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);

گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی می‌تواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبان‌های برنامه نویسی می‌تواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.

معناشناسی ایستا

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

سیستم نوع گذاری

یک سیستم نوع گذاری مشخص می‌کند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی می‌کند، چگونه می‌تواند آن نوع‌ها را تغییر دهد و رفتار متقابل آن‌ها چگونه‌است. این کارعموما توضیح داده ساختارهایی که می‌توانند در آن زبان ایجاد شوند را شامل می‌شود. طراحی و مطالعه سیستم‌های نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.

زبان‌های نوع گذاری شده و بدون نوع گذاری

یک زبان نوع گذاری شده‌است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته‌است. در غالب زبان‌های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان‌های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوعند. این زبان‌ها غالبا اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالبا رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم.

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

نوع گذاری ایستا و متحرک

در نوع گذاری ایستا تمام عبارات نوع‌های خود را قبل از اجرای برنامه تعیین می‌کنند(معمولا در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمی‌توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.

زبان‌های نوع گذاری شده ایستا می‌توانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحا نوع‌ها را در جایگاه‌های منتنی مشخص می‌نویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف‌ها را بر اساس متن استنباط می‌کند. غالب زبان‌های مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری می‌شوند

نوع گذاری قوی و ضعیف

نوع گذاری ضعیف این امکان را ایجاد می‌کند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالبا با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته‌ای از حروف باشد. چنین تبدیلات ضمنی غالبا مفیدند، اما خطاهای برنامه نویسی را پنهان می‌کنند.

قوی و ایستا در حال حاضر عموما دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می‌برند و منظورشان قوی، ایستایی نوع گذاری شده‌است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده‌است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می‌شود.

معناشناسی اجرا

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

برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی می‌شوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا می‌کنند.

کتابخانه هسته

اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالبا با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.

عمل

طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازی‌های زبان هستند.

خصوصیات

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

  • تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
  • توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
  • پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحا در رفتار پیاده سازی مدل موجودند.

پیاده سازی

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

خروجی یک کامپایلر ممکن است با سخت‌افزار و یا برنامه‌ای به نام مفسر اجرا شود. در برخی پیاده سازی‌ها که از مفسر استفاده می‌شود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازی‌های زبان برنامه نویسی بیسیک کامپایل می‌کنند و سپس کد را خط به خط اجرا می‌کنند.

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

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

تاریخچه

پیشرفت‌های اولیه

اولین زبان برنامه نویسی به قبل از رایانه‌های مدرن باز می‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، پانچ کارت‌ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.

پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

  • APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
  • PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
  • در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملا شئ گرا معرفی شد.

  • C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
  • Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
  • در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

هر یک از این زبان‌ها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبان‌ها از تبار حداقل یکی از زبان‌های فوق به شمار می‌آیند.

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.

یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالبا با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساسا نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.

سنجش استفاده از زبان

مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفاده‌است، و اینکه کاربرد چه معنی می‌دهد با توجه به زمینه تغییر می‌کند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبان‌ها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالبا روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامه‌های کاربردی، C در برنامه‌های تعبیه شده و سیستم‌های عامل؛ و بقیه برنامه‌ها معمولاً برای نوشتن انواع دیگر برنامه‌ها کاربرد دارند. روش‌های مختلفی برای سنجش محبوبیت زبان‌ها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شده‌است:

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

طبقه بندی‌ها هیچ برنامه غالبی برای دسته بندی زبان‌های برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبان‌ها معمولاً با ترکیب المان‌های چند زبان پیشینه بوجود می‌آیند که هربار ایده‌های جدید درگردشند. ایده‌هایی که در یک زبان ایجاد می‌شوند در یک خانواده از زبان‌های مرتبط پخش می‌شوند، و سپس از بین خلاهای بین خانواده‌ها منتقل شده و در خانواده‌های دیگر ظاهر می‌شوند.

این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر می‌کند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق می‌کند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.

در نگاه کلی، زبان‌های برنامه نویسی به مثال‌های برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم می‌شوند. مثال‌ها شامل برنامه نویسی رویه‌ای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبان‌ها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبان‌های برنامه نویسی ممکن است همه منظوره باشند، زبان‌های برنامه نویسی سیستمی، زبان‌های اسکریپتی، زبان‌های محدوده مشخص، زبان‌های همزمان/ گسترده(و یا ترکیب اینها). برخی زبان‌های همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شده‌اند.

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.

+ نوشته شده در شنبه هفتم آبان 1390ساعت 16:18 توسط نیلوفر جمشیدی |

 

جملات بزرگان در مورد برنامه نویسی

باگ كردن يك كد چندين مرتبه از نوشتن آن سخت‌تر است. بنابراين اگر كد اوليه خود را بسيار هوشمندانه بنويسيد، جهت ديباگ كردن آن به اندازه‌ي كافي باهوش نخواهيد بود! Brian Kernighan

تنها دو نوع زبان برنامه نويسي وجود دارد: آنهايي كه برنامه نويس‌ها از آن شكايت دارند و آن‌هايي كه اصلا مورد استفاده قرار نمي‌گيرند! BjarneStroustrup

هر كسي مي‌تواند كدي بنويسد كه يك كامپيوتر آن‌را درك كند. يك برنامه نويس خوب كدي را مي‌نويسد كه براي ساير همكارانش قابل درك باشد. Martin Fowler

اندازه‌گيري درصد پيشرفت يك پروژه برنامه نويسي با شمارش تعداد سطرهاي كدهاي آن همانند اندازه گيري درصد پيشرفت ساخت يك هواپيما از طريق وزن كردن آن است! Bill Gates

 برنامه نويسي سطح پايين Low-Levelروح برنامه نويس‌ها را جلا مي‌بخشد! John Carmack, ID software

بزرگي واقعي با اندازه گيري مقدار آزادي كه به ديگران عطا مي‌كنيد، سنجيده مي‌شود و نه به اينكه چگونه ديگران را وادار مي‌كنيد تا آنچه را كه مد نظر شما است اجرا كنند. Larry Wall

 هيچگاه از gets و sprintf استفاده نكنيد، در غير اينصورت شياطين به زودي به سراغ شما خواهند آمد! FreeBSD Secure Programming Guidelines

صحبت كردن ساده است. كدت رو نشون بده! Linus Torvalds علوم رايانه هيچگاه شخصي را تبديل به يك برنامه نويس خوب نمي‌كنند همانطور كه مطالعه در مورد رنگ‌ها و قلم‌ها شما را تبديل به يك نقاش خوب نمي‌كند. Eric Raymond

برنامه نويسي مانند س.ك.س است. يك اشتباه و سپس تحمل كردن و پشتيباني آن تا آخر عمر! Michael Sinz

هيچ برنامه‌اي تا زمانيكه آخرين يوزر آن بميرد به پايان نخواهد رسيد! از يك گروه پشتيباني نرم افزار ناشناس!

پايان دنياي يونيكس 2 به توان 32 ثانيه پس از اول ژانويه 1970 است! ناشناس زماني‌ كه كد مي‌نويسيد
فرض كنيد شخصي كه قرار است در آينده از كدهاي شما نگهداري كند يك ديوانه‌ي زنجيري است كه آدرس خانه‌ي شما را مي‌داند! Rick Osborne سادگي يك برنامه يكي از شرايط قابل اطمينان بودن آن است. Edsger Dijkstra

يونيكس سيستم عامل ساده‌اي است، اما شما بايد فرد باهوشي باشيد تا بتوانيد اين سادگي را درك كنيد! Dennis Ritchie
اگر به كامپايلر دروغ بگوئيد او بعدا انتقام خواهد گرفت! Henry Spencere Perl

تنها زبان برنامه نويسي است كه پيش و پس از رمزنگاري RSA به يك شكل به نظر مي‌رسد!
Keith Bostic

+ نوشته شده در شنبه هفتم آبان 1390ساعت 15:58 توسط نیلوفر جمشیدی |

رمز موفقیت در برنامه نویسی (برای تازه کارها)

 

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

مقدمه

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

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

با وجود موتورهای جستجو که در عرض چند ثانیه می توانند نیاز ما به اطلاعات را تامین کنند دیگر نیازی به حفظ کردن نیست. حدود 10 ، 11 سال پیش شاید این مطلب درست بود (البته در ایران) چون دسترسی به اینترنت محدود بود ، همچنین اینترنت پیشرفت لازم را نکرده بود تا افراد عادی بتوانند به راحتی با آن کارکنند. در طی این 10 ، 11 سال خیلی تکنولوژی ها و استاندارد ها به وجود آمده اند. و بسیاری از نرم افزارها به مرور کامل و کاملتر شده اند. سایت های زیادی متولد شدند. بسیاری از دانشگاه ها منابع آموزشی را از طریق سایت های اختصاصیشان در اختیار عموم قرار داده اند. با ابتکار و هنر تعدادی برنامه نویس در خلق سیستم های مدیریت محتوای منبع باز و رایگان (Open Source Content Management System) امکان به وجود آمدن بی شمار انجمن تخصصی در زمینه های مختلف با حداقل هزینه فراهم گشته است. که هر کدام از این انجمن ها را می توان یک منبع کاربردی و غنی اطلاعات به حساب آورد.

یکی از مواردی که همیشه برای من سوال بوده برخی آزمون های برنامه نویسی هستند که بر روی کاغذ انجام می شوند و یکی از معیارهای ارزشیابی آن ها هم درستی syntax است!! امروزه با وجود مفسرها (interpreter) و همگردان های (compiler) پیشرفته ای که تولید شده اند دیگر نیاز به نگرانی برنامه نویس نیست. برخی از این ابزار های پیشرفته خطای syntax را نه بعد از تفسیر و یا همگردانی بلکه در همان زمان نوشتن برنامه به برنامه نویس گوشزد می کنند و حتی برخی از اشتباهات را هم خوشان اصلاح می کنند. جدای از این ها معمولا برای هر کدام از زبان های برنامه نویسی کلی مرجع سریع وجود دارد که با یک نگاه می توان syntax مورد نیاز را پیدا و استفاده کرد.

اصل مطلب

برای این که مقاله مفید واقع شود ، فردی را تصور کنید که می خواهد یک پروژه (تفاوتی نمی کند در چه زمینه باشد) را اجرا کند. این فرد مبانی برنامه نویسی را گذرانده ولی آشنایی با زبانی که قرار است این پروژه به وسیله آن انجام شود و همچنین تکنولوژی های مرتبط با آن را را ندارد. چه باید بکند؟ از کجا باید شروع کند؟ منابع آموزشی مورد نیازش را از کجا باید تامین کند؟ و ...

  1. برای شروع لازم است یک مرجع سریع تهیه کند. از کجا؟ اگر آشنایی با زبان انگلیسی نداشته باشد مجبور است سری به کتاب فروشی های داخلی بزند و دنبال کتاب های کم حجم در رابطه با زبان مورد نظرش بگردد. کتاب هایی که با پیشوند یا پسوند عناوینی مثل "مرجع سریع" ، "آموزش گام به گام" ، "در چند قدم" ، "برای مبتدی ها" ، "آموزش در 21 روز" ، "آموزش در یک هفته" و ... همراه هستند از دسته مراجع سریع هستند. مراجع سریع معمولا چیزی حدود 100 صفحه هستند.
    در صورتی که با زبان انگلیسی آشنا باشد خیلی عالی است چون می تواند از کتاب ها و منابع الکترونیک استفاده کند. استفاده از این منابع چند مزیت دارد :
    1.  به روز هستند.
    2.  با ترجمه عجیب و غریب مترجمان ایرانی خراب نشده!
    3.  در هر زمینه این بالاخره یک چیزی می تواند پیدا کند.
    4. هزینه زیادی را صرفه جویی کرده.
    5.  مطمئن است برای کم کردن حجم آن چیزی از کتاب زده نشده است!
    6. می تواند از امکان جستجو استفاده کند که صرفه جویی زیادی در زمان به همراه دارد.
    برای پیدا کردن منابع مورد نظرش باید از اینترنت و یکی از موتورهای جستجو استفاده کند. می تواند از لغات کلیدی با ترکیب زیر استفاده کند که در همه آن ها x نام زبان برنامه نویسی یا تکنولوژی مورد نظر است (این موارد تنها نمونه هستند ، می تواند بسته به نیاز خود تکریبات جدیدی نیز اضافه کند) :
    pdf x
    chm x
    reference manual x
    x complete reference
    step by step guide
    beginner x for
    tutorial x
    x fast reference
    ...
    دو فرمت  PDF (Portable Document Format - Acrobat Reader software) و CHM (Compiled HTML Help - Compatible with Windows Operation System) معمولا برای کتب الکترونیکی مورد استفاده قرار می گیرند که با اضافه کردن یکی از این دو فرمت به رشته جستجو سریع تر به مقصود می رسد.
     
  2. چند روزی را باید صرف مطالعه کامل این مرجع سریع کند. این مطالعه حتما باید سطحی باشد و نیازی به تمرین مطالب گفته شده در کتاب و حفظ کردن (حفظ اخ) آن ها نیست. تنها قدری تامل کفایت می کند. بعد از این مرور سطح چه چیزهایی به دست می آورد :
    1. نگرانیش کم می شود و بسیاری از مجهولاتی که در ذهنش نسبت به کار وجود دارد از بین می رود.
    2. متوجه می شود که چه امکاناتی در اختیار دارد و کجا باید از این امکانات استفاده می کند.
    3. اگر فردی با ضریب هوشی معمولی به بالا باشد ، در موقع مطالعه کتاب قسمتی از نقشه (Plan) پروژه در ذهنش نقش می بندد که در موقع شروع کار بسیار کمک خواهد کرد.
    4. حالا می داند هر کدام از مطالبی که نیاز دارد را کجای کتاب می تواند پیدا کند.
+ نوشته شده در شنبه هفتم آبان 1390ساعت 15:51 توسط نیلوفر جمشیدی |

زبان برنامه نویسی #F چیست؟
زبان برنامه نویسی تابعی بهترین روش حل مسایل کامپیوتریست اما زبان برنامه نویسی تابعی خالص برای برنامه نویسی همه منظوره مناسب نمیباشد بنابراین به تدریج زبانهای برنامه نویسی تابعی در کنار زبانهای شی گرا و دستوری باقی مانده و استفاده عمومی نیافتند. مچنین در این مدل ویژگیهای افزوده شده را به راحتی میتوان در هر برنامه ای نوشت و به راحتی به آن افزود. F# یک زبان طبیعی به وجود آمده بر این مبناست بعلاوه بسیار بیشتر از یک زبان برنامه نویسی تابعی میباشد. برخی از زبانهای برنامه نویسی تابعی معروف بطور کلی (OCAML , Haskel , Lisp) با دستورات زمان اجرای سفارشی کار میکند و این مسئله باعث نبود روش برنامه نویسی چند فعالیته میشود.
F# یک زبان همه منظوره برای محیط .Net است که برای حالت اجرا بصورت همه منظوره به کار میرود و به راحتیهر سه مدل برنامه نویسی را شامل میشود. برای حل مسایل مختلف در موثرترین روش میتوانید محیط خاص آنرا در برنامه انتخاب کنید. شما میتوانیداز برنامه نویسی توصیفی استفاده کنید و یا توابع را به راحتی با هم ترکیب کنید و یا روشهای شی گرا و دستوری را در همان برنامه استفاده کنید و از قابلیتهای مختلف هر کدام در برنامه سود ببرید. مثل دیگر برنامه های تابعی F# نوع قوی دارد اما از نوع استنتاجی هم سود میبرد بنابراین برنامه نویسان نیاز ندارند زمان زیادی برای توضیح انواع توابع هدر دهند مگر اینکه در موارد خاص ابهاماتی دربرنامه پیش بیاید که لزوم داشته باشد به وضوح بیان شود.علاوه بر این F# بصورت کاملی با چهارچوب .Net و کتابخانه کلاس اصلی آن یعنی BCL ترکیب شده و به راحتی میتوان از آن در F# استفاده کرد و این مسئله مانند C#‎‎ و VB میباشد و حتی در مواردی استفاده از BCL در F# از دیگر زبانهای تحت .Net راحت تر است.

F# مدل خود را از روی OCAML انتخاب کد که زبان برنامه نویسی تابعی شی گرای موفقی بود سپس با گسترش قابلیتها خوب این برنامه آنها را از نظر فنی و فلسفه کار داخل غالب .Net گنجاند. این زبان کاملا از غالب .Net پشتیبانی کرده و به کاربران این امکان را میدهد که هر چیزی که در محیط .Net ارائه شده است با F# استفاده کنند. کامپایلر F# میتواند تمام پیاده سازیهای زیر ساختار زبانهای معمول را بپذیرد و از روشهای معمول .Net بدون تغییر کد استفاده کند. همچنین میتواند برای کد نویسی IL به صورت برچسب دار استفاده شود.

F# محدود به محیط ویندوز نبوده و میتوان آنرا در لینوکس ، مکینتاش و... استفاده کرد که بخشی از کتاب مورد ترجمه به نحوه عملکرد روی لینوکس میپردازد.کامپایلر F# را میتوان داخل محیط Virtual Studio افزود و با عیب یاب آن به چک کردن دستورات به صورت اتوماتیک پرداخت. همچنین این کامپالر راهنمایی هایی برای استفاده از تمامی توابع عرضه میکند که در نوع خود بینظیر است و برنامه نویسان اشاره میکنند که این مسئله بسیار برای شبیه کردن برنامه به زندگی واقعی موثر است.

F# توسط دکتر دون سیم ابداع شد. در حال حاضرمحصولیست وابسته به تیمی کوچک اما کاملا پیشرفته واقع در مرکز تحقیقات مایکروسافت - کمبریج - لندن - انگلستان با این حال F# در حد یک زبان آکادمیک یا تحقیقاتی نیست و برای خیلی از برنامه های دنیای واقعی (که تعداد آنها به شدت در حال افزایش است) به کار میرود. با توجه به اینکه زبان تابعی دیگری به ندرت در محیط .Net اجرا میشوند F# بعنوان استاندارد این نوع زبانها در آمده است. زبانهای برنامه نویسی تابعی در این میان از F# تبعیت میکنند زیرا این زبان کیفیت پیاده سازی و اشتراک با .Net و Virtual Studio را بسیار بهتر در خود دارد. هیچ برنامه برنامه نویسی .Net دیگری از لحاظ کارکرد ، استفاده و انعطاف پذیری به پای F# نمیرسد.
+ نوشته شده در یکشنبه بیست و پنجم اردیبهشت 1390ساعت 15:34 توسط نیلوفر جمشیدی |

همانطور که میدانید زبان C در سال 1972 توسط آقای ریچی طراحی شد ..علت نامگذاری زبان C این است که چون بعد از زبان B طراحی شده است آن را C نامیده اند .
برنامه نویسان زبان های برنامه نویسی را به سه دسته مختلف زبان های سطح بالا . زبان های میانی و زبان های سطح پایین طبقه بندی می کنند . زبان C در این طبقه بندی در جمع زبانهای میانی قرار می گیرد علت آن هم این است که چون همانند زبان های سطح پایینی مثل زبان اسمبلی می تواند مستقیما به حافظه دسترسی داشته باشد و همچون زبان سطح بالای پاسکال قابلیت خوانایی بالایی دارد ...
زبان C جزو یکی از قدرتمند ترین زبان های موجود می باشد (بوده و هست )..قابلیت های انعطاف بالای این برنامه قابلیت بهره برداری از سخت افزار و... جزو عوامل قدرتمند نگه داشتن این زبان می باشند .
اصول کلی در نوشتن یک برنامه

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

1-تعین نیازهای برنامه
2-تحلیل برنامه
3-طراحی الگوریتم برنامه
4-پیاده سازی الگوریتم
5-تست و کنترل برنامه
6-ذخیره برنامه

----------------------------------------------------------------------------------
یک مثال : فرض کنید از ما می خواهند برنامه ای بنویسیم تا میانگین دو عدد را پیدا کند ؟

مراحلی که طی می کنیم به شرح زیر است :
ابتدا پیش خود کمی فکر می کنیم و به این نتیجه می رسیم که برای اینکه روی این دو عدد عملیاتی انجام دهیم لازم است این برای این دو عدد حافظه ای را در نظر بگیریم (این دو عدد را داخل متغیر هایی از جنس آن عدد قرار دهیم ).سپس باید روی این دو عمل اعمال محاسباتی خود را انجام دهیم (که در این مثال باید آن دو را با هم جمع کرد و تقسیم بر 2 کرد ). اکنون نوبت این است که جواب بدست آمده برای این محاسبه در حافظه ذخیره شود تا بتوان از آن استفاده کرد (پس باید یک متغیر دیگر از نوع جواب محاسبات انجام شده تعریف کرد و این نتیجه را درون آن متغیر ریخت ... سپس بر طبق دستور با حافظه خود(متغیر سوم ) به دلخواه رفتار می کنیم ..(یعنی می توان آن را چاپ کرد .. وارد برنامه ای دیگر کرد و...)
--------------------------------------------------------------------------------
همانطور که می بینید این گونه ای از پیاده سازی یک طرح برای برنامه(الگوریتم برنامه ) است که سپس می توان آن را به شکل کد در آورد و پیاده سازی کرد ....
آیا به نظرتان این طرح (الگوریتم )نمی تواند در تمام برنامه ها یکسان باشد؟

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

دقت داشته باشید که اغلب الگوریتم ها مراحل زیر را شامل می شوند :

1-خواندن داده ها (ورودی ها به برنامه)
2-انجام عملیات ( مثل محاسبات . حلقه ها . شروط و...)
3-چاپ نتایج


فلوچارت چیست ؟
فلوچارت در حقیقت رسم این الگوریتم به صورت گرافیکی است که برای سهولت کار مورد استفاده قرار می گیرد . رسم فلوچارت برای کسانی که تازه پا به عرصه برنامه نویسی گذاشته اند سبب آسان شدن حل مسائل می شود و هر چه که پیش می روند نیاز کمتری به رسم فلوچارت می بینند و سعی می کنند تا الگوریتم را در ضحن خود طراحی و پیاده سازی کنند و شروع به نوشتن برنامه کنند .


آشنایی با زبان سی :

در پست های قبلی مقداری از الگوریتم و طرح برنامه و همچنین از فلوچارت بحث کردیم ..در این پست و پست های بعدی سعی خواهم کرد شما را بیشتر با زبان سی آشنا کرده و گام به گام از ابتدا به بررسی ساختار های این زبان بپردازم ...در طول این مسیر شاهد استفاده از مطالب قبلی نیز خواهید بود ...

خوب همانطور که می دانید زبان سی شامل یک سری دستورات خاص می باشد که یک برنامه نویس که قصد برنامه نویسی به زبانی مثل سی را دارد کد های بر نامه را نوشته سپس توسط ادیتور یا همان کامپایلر ( توربو سی یا ویژوال سی پلاس پلاس ) آن را کامپایل می کند ....

خوب در اینجا اجازه دهید که با اولین مفهوم که کامپایل است شما را بیشتر آشنا کنم ..

کامپایل کردن یعنی اینکه دستورات ما (که به زبان سی نوشته شده اند )توسط یک برنامه (که به آن کامپایلر گویند ) به زبان ماشین ترجمه شود تا برای ماشین قابل درک شود و دستگاه بتواند آن را به اجرا در آورد ....


ما در ابتدا با یک سری از ابتدایی ترین دستورات زبان سی آشنا خواهیم شد و قدم به قدم پیش خواهیم رفت .
------------------------------------------------
باز کردن و بستن برنامه : همانند تمام زبان های دیگر برای شروع باید برنامه باز شود و در انتها نیز باید برنامه بسته شود

ما برای شروع از دستور } و برای خاتمه از دستور { استفاده می کنیم ..

یعنی فرض کنید ما می خواهیم یک برنامه بنویسیم که حاوی 5 خط کد نویسی است برنامه باید به این شکل باشد :

}
خط اول کد نویسی
خط دوم کد نویسی
خط سوم کد نویسی
خط چهارم کد نویسی
خط پنجم کد نویسی
{
همانطور که ملاحظه می کنید باید تمام کد نویسی مابین } و { قرار گیرد

---------------------------

دستور خواندن از صفحه کلید : برای اینکه برنامه عددی .حرفی .رشته ای یا ... را از صفحه کلید بخواند از دستور () scanf استفاده می شود توجه داشته باشید که داخل پرانتز متغیری که می خواهیم چیزی که وارد می شود در آن قرار گیرد باید گذاشته شود ...

یک نمونه :
(scanf("%d",&i

-------------------------

دستور چاپ بر روی صفحه نمایش : برای اینکه متغیری یا عبارت ثابتی را بر روی صفحه نمایش چاپ کنیم از دستور () printf استفاده می کنیم ... توجه داشته باشید اگر بخواهیم عبارتی عینا بر روی صفحه نمایش چاپ شود به صورت ("عبارت مورد نظر ")printf عمل خواهیم کرد ...

دو نمونه :

کد:
("printf("DrEaMeR
(printf("%d",i




نکته 1:شاید بعضی از دستورات بکار برده در نمونه ها برایتان نامفهوم باشد مثل d%و یا i& و.. با این دستورات در ادامه کار آشنا خواهید شد ..

نکته2: توجه کنید باید در انتهای هر خط کد نویسی در زبان سی باید ; به کار رود (بجز در مواردی که ذکر خواهد شد )..

-------------------------------------
توجه کنید به دستوراتی مثلprintf یا scanf توابع کتابخانه ای گویند ...این بدین معنا است که زبان سی این چنین توابعی را در خود برنامه برای استفاده کاربر قرار داده .... نکته مهم در اینجا این است که برای استفاده از این دستورات ( توابع کتابخانه ای ) ما باید این توابع را به برنامه بشناسانیم (یعنی به برنامه بگوییم آقا تو یک همچین دستوری را به صورت پیش فرض داری که فلان کار را انجام می دهد ) این کار را در زبان سی توسط HEADER FILE ها انجام می دهیم (فایل های سر آیند )


نحوه تعریف کردن این توابع هم به برنامه بدین شکل است که در ابتدای کد نویسی حتی قبل از } باید دستور(دستورات) include# را به کار برد .... در ادامه بیشتر با فایل های سر آیند آشنا می شویم ....

همانند اکثر آموزش زبان های برنامه نویسی ما هم اولین برنامه خود را با برنامه hello world آغاز خواهیم کرد ..در این برنامه ما قصد داریم تا تنها یک نوشتهhello world را در خروجی چاپ کنیم .
کد:
#include
void main()
{
printf("hello world");
}


کد نویسی این برنامه به صورتی که من در بالا نوشته ام است.من با دادن توضیحات شما را با تک تک کد های این برنامه آشنا می کنم .
خوب ببینید همانطور که گفتیم ما می خواهیم برنامه ای بنویسیم که یک نوشته را در صفحه خروجی عینا چاپ کند ... همانطور که به یاد دارید گفتم برای چاپ بر روی صفحه نمایش از دستور printf استفاده می کنیم (و متذکر شدم که اگر بخواهیم عبارتی عینا چاپ شود باید مابین "" قرار گیرد ).

یادتان می آید که گفتم هر تابعی که در برنامه می نویسیم (مثل همین printf ) باید به برنامه تعریفش کنیم که آقا این تابع فلان کار را انجام میدهد ... (البته نگران نباشید ما نباید برای برنامه این تعریفات را بنویسیم خود نویسنده برنامه این کار را انجام داده ..تنها لازم است ما جای این تعریفات را به برنامه بگوییم ..... دقت کنید هر تابع(هر چند تابع ) در یک فایل سرآیند قرار دارد که داخل آن فایل ها این تعریفات تابع به برنامه قرار دارد..پس فقط لازم است تا اسم این فایل (یا فایل های ) سرآیند را با توجه به تابع مربوطه به اول کد نویسی اضافه کنیم ) ...

اسم فایل سرآیند(header file) ای که در آن تعریفات printf (و چند تابع دیگر ) وجود دارد stdio است ..
طریقه معرفی این فایل هم بدین گونه است که قبل از شروع برنامه بنویسید

دقت کنید جمله include# در تعریف همه این فایل های سرآیند ثابت است تنها جمله بین <> بسته به نوع تابع ها تغیر می کند ...

مورد دیگر نیز h. بعد از stdio است که آن نیز به برنامه میگوید این فایل از نوع فایل سرآیند است (header file ) پس باید بعد از قرار دادن نام هر کدام از فایل های سر آیند بین <> یک h. نیز بعد از نام آن فایل سرآیند بگذاریم

کد:
;("printf("hello world



این هم کد چاپ کردن نوشته ما است .. همانطور که گفتم باید در زبان سی در انتهای هر خط کد نویسی (بجز بعضی مورد ها ) باید یک ; بگذاریم

خوب اگر دقت کنید دیگر چیز خاصی در کد نویسی این برنامه نمی ماند بجز یک خط و آن هم
()void main است ....این دستور چیست؟؟؟

دقت کنید زبان سی به صورت پیش فرض دوست دارد تا به شکل تابعی عمل کند (در این مورد بعدا مفصل بحث خواهیم کرد) و تمایل دارد یک مقدار را به جایی برگرداند ..ما فعلا نمی خواهیم تا یک همچین اتفاقی رخ دهد پس با نوشتن این یک خط مانع از این کار می شویم (تا به توضیحاتش برسیم یادتان باشد فعلا در ابتدای هر برنامه {مابینinclude# و } در یک خط این دستور را بنویسید )

در C
پنج نوع داده اصلي وجود دارد كه عبارتند از : char، int،، float،، double، و void
. در اين زبان اندازه و محدوده اي كه هر نوع داده اختيار مي كند بستگي به
نوع پردازشگر (Processor) و نحوه پياده سازي كامپايلر دارد. شناسه هايي ( متغير
برچسب ، اسامي توابع و ... ) كه از نوع char باشند براي ذخيره كردن مقاديري كه
توسط كاراكترهاي اسكي تعريف شده اند به كار مي روند. شناسه هايي از نوع int براي
ذخيره كردن مقادير صحيح ، و از نوع floatو doubleو براي ذخيره كردن اطلاعات عددي
اعشاري به كار ميروند كه محدوده آنها توسط تعداد ارقام و دقت آنها مشخص ميشود.
نوع void در مورد توباع به كار مي رود .
نوعهاي داده اصلي ( به جز void ) مي توانند با عباراتي مثل signed، long، unsigned
و shortو تركيب شده و نوع هاي ديگري را به وجود آورند . ( جدول (1) ).
نوع | اندازه تقريبي به بيت | بازه قابل قبول |
char
|
| 8 | 127- تا | 127 unsigned char
|
| 8 | 0 تا | 255 signed char
|
| 8 | 127- تا | 127 int
|
| 16 | 32767- تا | 32767 unsigned int
|
| 16 | 0 تا | 65525 signed int
|
| 16 | 32767- تا | 32767 short int
|
| 16 | 32767- تا | 32767 unsigned
|
| 16 | 0 تا | 65525 | | | short int |
signed
|
| 16 | 32767- تا | 32767 | | | short int |
long int
|
| 32 | َ2147483647- تا | 2147483647 |


عبارات ورودی / خروجی :
توضیحات : برای بهتر دیدن مقاله فایل .rar رو که attach کردم، دانلود کنید.


بخش اول : (printf())

در C از دستور printf() برای چاپ خروجی بر روی صفحه نمایش استفاده میشود و همچنین از scanf() برای خواندن اطلاعات از ابزارهای ورودی مانند keyboard بهره گرفته میشود. اما در این بین نکاتی است که در این بخش به آنها اشاره میکنیم .

عبارات خروجی :
دستور printf() در تابع کتابخانه ای stdio.h قرار دارد. این تابع در صورت صحیح اجرا شدن تعداد کاراکترهای چاپ شده و در غیر این صورت عددی منفی را برمیگرداند. فرم کلی دستور printf() به صورت روبرو است :
کد:
Printf( "<1>" , <2>);
عبارت 1 : این بخش میتواند 3 حالت داشته باشد :
1. یک متن خالص باشد :

کد:
printf("Iran is my country");

2. حاوی فرمت متغیرهایی باشد که در عبارت 2 آورده میشوند، مانند :
کد:
printf("x=%d",x)
. باید توجه داشت که فرمت های گوناگون که هر کدام با یک حرف (بعد از علامت % ) نشان داده میشوند، برای هر Data Type (مراجعه شود به پست انواع داده ها – نویسنده : aria ) فرق میکند. همگی فرمت ها با علامت % شروع میشوند . مثلا در مثال بالا %d بیان کننده ی data type عدد صحیح است (% نشان دهنده ی آغاز یک فرمت و d نماد اعداد صحیح است ). به جدول زیر توجه کنید :
%c : کاراکتر
%d : اعداد صحیح دهدهی + و -
%i : اعداد صحیح دهدهی + و -
%e : نمایش علمی عدد همراه حرف e
%E : نمایش علمی عدد همراه حرف E
%f : عدد اعشاری ممیز شناور
%g : اعداد اعشاری ممیز شناور
%G : اعداد اعشاری ممیز شناور
%o : اعداد مبنای 8 مثبت
%s :رشته ای از کاراکتر ها
%u : اعداد صحیح بدون علامت
%x : اعداد مبنای 16 مثبت با حروف کوچک
%X : اعداد مبنای 16 مثبت با حروف بزرگ
%p : Pointer (اشاره گر)
%n :موجب میگردد تا تعداد کاراکترهایی که تا قبل از این فرمت چاپ شده است در متغیر متناظر با آن قرار گیرد.
%% : علامت %
%hd : برای چاپ اعداد از نوع long
%ld : برای چاپ اعداد از نوع short
3. حاوی کاراکترهای کنترلی باشد. به این صورت که با این کاراکتر ها میتوان محل چاپ،چاپ در سطر بعدی و ... را تنظیم کرد. این کاراکنر ها با "\" شروع میشوند و بعد از آن شناسه ی دیگر آن می آید(مانند کاراکترهای فرمت). در زیر اطلاعات تفصیلی در این باره آمده است :
\f : موجب انتقال کنترل به صفحه ی جدید میشود.
\n : موجب انتقال کنترل به خط جدید میشود.
\t : انتقال به 8 محل بعدی صفحه نمایش.
\" : چاپ (")
\' : چاپ (')
\\ : back slash
\v : انتقال کنترل به 8 سطر بعدی
\N : ثابت های مبنای 8 (N عددی مبنای 8 است)
\xN : ثابت های مبنای 16 (N عددی مبنای 16 است)

خوب حالا وحشت نکنید، الان مثال حل میکنیم تا مطلب جا بیفته قبل از هر چیز باید بگم عبارات و جمله هایی که در برنامه بعد از "//" قرار میگیرند توسط کامپایلر اجرا نمیشوند و تنها جهت توضیح و خوانایی برنامه است.
مثال 1: چاپ یک رشته ی معمولی با printf() :
کد:
#include// the library that printf is in that
int main()
{//Begin of program
printf("C is a language"); // printing the text on the screen
return 0; //waits for a key press after the program is finished & wont jump out of it
} //End of program
خروجی : C is a language


حالا اگر یک تغییرات کوچکی در برنامه ی بالا بدهیم و دو عبارت را چاپ کنیم :
کد:
#include
int main()
{
printf("C is a language");
printf("I like it"); //prints the second text
return 0;
}

خروجی : C is a languageI like it
به خروجی بالا دقت کنید. دقیقا عبارت دوم بعد از عبارت اول چاپ شده است و بسیار ناخوانا است. اینجاست که بحث حالت سوم پیش ماید. یعنی کاراکترهای کنترلی.
با نگاهی به این کاراکترها میبینیم که آنها میتوانند نیازهای ما را برطرف کنند. مثلا اگر من بخواهم جمله ی دوم من در خط بعدی چاپ شود، یا در 8 سطر بعدی چاپ شود، یا در 8 ستون بعدی(یک Tab) و ...
.....
کد:
Printf("C is a language/n"); // Control would be placed in next line
printf("I like it");

…..
خروجی :
C is a language
I like it
حال یک مثال دیگر :
.....
کد:
printf("C is a language /t"); // Control would be placed in next Tab
printf("I like it");

…..
خروجی :
C is a language I like it

حال یک مثال دیگر :
.....
کد:
printf("/"Hello/"");

…..
خروجی :
"Hello"
و بقیه نیز بر حسب کاربرد به اینگونه است ...

کاراکترهای فرمت :
خوب، با یک مثال شروع میکنیم. ما یک متغیر داریم که میخواهیم مقدار آن را در خروجی چاپ کنیم. نوع data type آن integer هستش و در هنگام تعریف کردن به آن مقدار اولیه 5 را داده ایم. خوب شروع میکنیم.
کد:
#include
int main()
{
int x=5;
printf("Our variable is called x & it is equal with %d",x);
return 0;
}

خروجی :
Our variable is called x & it is equal with 5
در مثال بالا دقت کنید . متن ها به صورت عینی چاپ میشوند و در جای %d عینا مقدار صحیح متناظر قرار میگیرد. به مثالی دیگر توجه کنید.
کد:
#include
int main()
{
int x=5;
float y=6.7;
printf("Our variables are called x=%d \tand\t y=%f",x,y);
return 0;
}

خروجی :
Our variable are called x=5 and y=6.7
بسیار خوب در این مثال ترکیبی از همه ی کارهای این بخش بود. \t ها باعث شد هنگام چاپ کنترل 8 کاراکتر به جلو بپرد و %d و %f هم که برای چاپ مقادیر صحیح و اعشاری int و float بودند.

حالا میرسیم به این مبحث که ما این همه نوشتیم ، حالا چه جوری پاکش کنیم ؟!؟! یا اینکه چه جوری تو یه جای خاص از صفحه بنویسیم ؟ مثلا سطر 10 و ستون 20 .برای این کارها 2 تابع موجود است که هردو در فایل conio.h قرار دارد.

تابعی که صفحه را پاک میکند clrscr() نام دارد. این تابع تمامی صفحه را پاک کرده و کنترل را به نقطه ی 0.0 منتقل میکند.
تابع gotoxy(a,b) مکان نما را به نقطه ی a,b منتقل میکند و از این پس نوشتن را در آن محل انجام میدهد. به مثال زیر توجه کنید :
....
کد:
gotoxy(10,20);
printf("C is a language");

…..
با اجرای این مثال جمله ی بالا در مختصات 10و20 صفحه چاپ میشود.


طول میدان :
برای اینکه به تابع printf() طول میدان بدیم تا هرکاری خواست در هنگام چاپ انجام نده باید در کاراکترهای فرمت تغییراتی رو ایجاد کنیم.
%5d
این دستور نشان دهنده ی یک کاراکتر فرمت صحیح با طول میدان 5 عدد صحیح است.
%5.3f
این دستور نشان دهنده ی یک کاراکتر فرمت اعشاری است با طول میدان 5 عدد صحیح و سه عدد اعشار.

پایان .

در انتها باید بگویم در C++ به جای printf() از تابعی با نام cout استفاده میشود . در این تابع کاراکتر های ورودی نقشی ندارند ولی از کاراکترهای کنترلی پشتیبانی میشود. روش استفاده از آن در مثال زیر نشان داده میشود:
کد:
#include
int main()
{
int x=5;
cout<<"We are printing an integer variable : "<<<"\N";
cout<<"again we are printing : "<<
cout<<"Finished";
return 0;
}

خروجی :
We are printing an integer variable : 5
Again we are printing : 5
Finished

توجه کنید که endl (end line) همان کار \n را انجام میدهد.


 

بخش دوم : scanf()

تابع scanf() اگر درست اجرا شود تعداد متغیرهایی را که از ورودی خوانده برمیگرداند و در غیر این صورت عبارت EOF ( با حروف بزرگ ) را برمیگرداند. صورت کلی scanf() به صورت زیر است :
کد:
Scanf("<1>",<2>);


عبارت <1> میتواند در برگیرنده ی 3 کاراکتر میتواند باشد :
1. کاراکترهای فرمت که از آنها به تفصیل در بَخش 1 سخن گفته شد.
2. space : که به آن فضای خالی گویند و گذاشتن حتی یک space سبب میگردد که در هنگام وارد کردن اطلاعات تمامی space ها ، Tab ها و new line ها نادیده گرفته شوند و اطلاعات خالص از صفحه کلید خوانده شود. مثلا اگر شما قبل از عدد ورودی 5 جای خالی بگذارید به دلیل وجود space در قسمت 1 نادیده گرفته میشوند و تنها عدد 5 خوانده میشود.
3. کاراکترهایی غیر از فرمت و space . این کاراکتر ها اگر عینا در هنگام وارد کردن اطلاعات وارد شوند از آنها صرفنظر میشوند. به مثال رو به رو توجه کنید : "%d,%d"
به کاما در بین دو کاراکتر فرمت توجه کنید. حال فرض کنید در ورودی اطلاعات به صورت زیر وارد شده : 5,10 در این حالت اعداد 5 و 10 خوانده میشوند و از کاراکتر کاما صرف نظر میشود.

در قسمت <2>، متغیر ها با آدرسشان ذکر میشوند. توجه شود که هنگامی که علامت & قبل از نام متغیر می آید، نشان دهنده ی آدرس آن است. یعنی دستور &variable1 آدرس متغیر variable1 را برمیگرداند.
کد:
scanf("%d%f", &x,&a);



مثال : محیط و مساحت یک مستطیل :
کد:
#include
#include
int main()
{
int x,y,area,p;
printf("Enter length & width : ");
scanf("%d%d", &x, &y);
area=x*y;
p=(x+y)*2;
printf(" Area = %d , p = %d", area,p);
getch();
return 0;
}

توابع خواندن کاراکتر از صفحه کلید :
برای خواندن کاراکتر از صفحه کلید ، 2 تابع وجود دارد : getch() و getche() . که هر دو عمل خواندن کاراکتر را با اندکی تفاوت انجام میدهند. تابع getch() کاراکتری را که از keyboard میخواند را در صفحه نمایش نمیدهد در حالی که getche() این کار را میکند (نمایش دادن کاراکتر). تفاوت هردوی آنها با scanf() در این است که نیازی به فشردن کلید Enter پس از فشردن کاراکتر بر روی صفحه کلید ندارد. به طوری که به سرعت پس از فشردن کلید بر روی صفحه، کاراکتر آن در متغیر از جنس char ذخیره میشود.
مثال

کد:
getch() :
#include
#include
int main()
{
char ch;
printf("Press a key : ");
ch=getch();
printf("You Pressed : ");
printf(" %c",ch);
getch();
return 0;
}

خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
C
در این مثال تنها یک C چاپ میشود و آن نیز مقدار موجود در متغیر ch است. تابع getch() همانطور که میدانیم چیزی در صفحه نمایش چاپ نخواهد کرد.


مثال
کد:
getche() :
#include
#include
int main()
{
char ch;
printf("Press a key : ");
ch=getche();
printf("\n You Pressed : ");
printf(" %c",ch);
getch();
return 0;
}

خروجی : اگر فرض کنیم که کاربر کلید C را زده باشد داریم :
C
You Pressed :C
در این مثال اولین C همانی است که از صفحه کلید خوانده شده و دومی مقدار موجود در متغیر ch است.


این مطلب بین C و ++C مشترک است.

برنامه های ساخت یافته :


توابع :
با استفاده از توابع میتوانیم برنامه را به بخش های کوچکتر شکسته و آن را بسیار خواناتر کنیم. باید گفت توابع قسمتی از برنامه هستند که از کد اصلی (بخش main ) حذف شده و به صورت یک قطعه برنامه نوشته میشود (مثلا فرض کنید عمل جمع در یک ماشین حساب از بدنه ی اصلی برنامه جدا شود و یک قطعه کد شود که دو عددی که باید جمع کند را به صورت ورودی بگیرد).یک کاربرد دیگر توابع این است که از دوباره نویسی کدهایی که کاربردشان زیاد است جلوگیری میکند. مثلا اگر تابع جمع ما در برنامه ی ماشین حساب در 5 جا باید نوشته شود، با یکبار نوشتن تابع، میتوان آن را در 5 جا صدا کرد ( فراخوانی،Call ) . وقتی یک تابع call میشود خط اجرای برنامه به آن تابع رفته و پس از اجرای کامل تابع به برنامه بازمیگردد.
در زبانهای برنامه نویسی روال تابع ها معمولا بر این اساس است که 2 نوع تابع دارند که یک سری یک مقدار ( متغیر ) را به برنامه برمیگرداند و سری دیگر فقط یک سری دستورات را اجرا میکنند ( البته بعضی از توابع هیچ یک از این دو سری نیستند . مانند constructor در کلاس ها-بعدا در مبحث کلاس ها توضیح داده میشود ).

نوع اول : تابع های دارای نوع .
این تابع ها دارای نوع (data type ) هستند، به طوری که مقداری که تابع برمیگرداند از جنس یکی از data type ها است.( مثلا int,char,double ,... ). این نوع توابع را به صورت کلی زیر مینویسند :

;()نام تابع نام datatype




کد:
int function1();
char function2();





function1 : تابعی از جنس int ( یعنی مقدار بازگردانده شده به برنامه از نوع عدد صحیح خواهد بود )
function2 : تابعی از جنس کاراکتر ( یعنی مقدار بازگردانده شده به برنامه از نوع کاراکتر خواهد بود )

توابع نوع دوم : این توابع تنها یک سری دستورات را اجرا میکنند و از هیچ نوع data type خاصی هم نیستند. این نوع توابع را به صورت کلی زیر مینویسند :

;()نام تابع void

مثال :



کد:
void function3();
void function4();





Function3 , function4 دارای هیچ نوعی نیستند و تنها یک سری دستورات را اجرا میکنند.

حال برای توضیح بیشتر فرض میکنیم دو تابع برای دو دکمه ی ماشین (دکمه ی C یا reset و دگمه ی =) حساب نوشته ایم . در دکمه ی C همه ی اطلاعات پاک میشود و همه چیز به حالت اول برمیگردد و در این حالت نیازی نداریم چیزی را به ماشین حساب بازگردانیم. اما در مورد دکمه ی = باید مقداری که از عملیات ریاضی حاصل میشود را بر روی صفحه ی نمایش ماشین حساب نمایش داد. پس باید یک مقدار به ماشین حساب بازگردد.
 
 
+ نوشته شده در شنبه پانزدهم اسفند 1388ساعت 8:38 توسط نیلوفر جمشیدی |

ict چیست؟

فن آوری اطلاعات و ارتباطات چيست ؟
در بخش اول اين مقاله به منظور آشنائی با ابعاد متفاوت فن آوری اطلاعات و ارتباطات به طرح سوالاتی در اين رابطه پرداخته گرديد. در ادامه ، ضمن بررسی تفاوت بين " اطلاعات " و "دانش " ، به اين موضوع مهم اشاره گرديد که می توان اطلاعات را به منزله مواد اوليه توليد دانش در نظر گرفت . بين استفاده درست از اطلاعات و توليد دانش با توسعه ، ارتباط مستقيم و تنگاتنگی وجود دارد.
در بخش دوم با تمرکز بر روی فن آوری اطلاعات و ارتباطات و ارائه تعاريف متفاوت، به بررسی زيرساخت فن آوری اطلاعات و ارتباطات ، خواهيم پرداخت .

فن آوری اطلاعات و ارتباطات ( ICT )
تفاوت فن آوری اطلاعات و ارتباطات ( ICT) با فن آوری اطلاعات ( IT ) ، چيست ؟ در فن آوری اطلاعات و ارتباطات ، دستگاه ها و فن آوری های ارتباطی دارای جايگاهی خاص بوده و از عناصر اساسی به منظور استفاده از مزايا و دستاوردهای فن آوری اطلاعات و ارتباطات ، محسوب می گردند. در ادامه با تعاريف متفاوت ICT ، بيشتر آشنا می شويم :

در اوايل سال 1990 به مجموعه سخت افزار ، نرم افزار ، شبکه و صنايع مرتبط به آنان ، فن آوری اطلاعات ( IT ) گفته می شد. در فن آوری اطلاعات و ارتباطات ( ICT ) ، تاکيد و محوريت بر روی جنبه ارتباطی می باشد ، بگونه ای که ارتباطات به منزله يک "بايد" مطرح بوده که فن آوری اطلاعات بدون وجود آن امکان ارائه سرويس ها و خدمات را دارا نمی باشد .

فن آوری اطلاعات و ارتباطات،واژه ای است که به هر نوع دستگاه ارتباطی و يا برنامه نظير: راديو ، تلويزيون ، تلفن ها ی سلولی ، کامپيوتر ، نرم افزار ، سخت افزارهای شبکه ، سيستم های ماهواره اری و نظاير آن اطلاق شده که سرويس ها ،خدمات و برنامه های متعددی به آنان مرتبط می گردد( کنفرانس از راه دور ، آموزش از راه دور) .

فن آوری اطلاعات وارتباطات اغلب در يک مفهوم و جايگاه خاص مورد بررسی کاربردی دقييق تر قرار می گيرد نظير : فن آوری اطلاعات وارتباطات در آموزش ، بهداشت ، کتابخانه ها و غيره .

فن آوری اطلاعات و ارتباطات ، به مجموعه امکانات سخت افزاری ، نرم افزاری ، شبکه ای و ارتباطی به منظور دستيابی مطلوب به اطلاعات ، گفته می شود .

همگرائی بين کامپيوتر و ارتباطات ، فن آوری اطلاعات و ارتباطات را شکل می دهد .( پيوند بين کامپيوتر و بهره برداری از تمامی قابليت های آن خصوصا" پردازش و ذخيره سازی داده با امکانات متعدد ارتباطی ) .

با اين که تکنولوژی های مرتبط با کامپيوتر به نوعی در جنگ جهانی دوم مورد استفاده قرار می گرفت ، ولی پتانسيل های گسترده آن پس از تحقق دو تحول عمده در سال 1980 بر همگان آشکار گرديد : تحول در صنعت نيمه هادی ها ( ترانزيستور ، مدارات مجتمع ، ميکرو تراشه ها ) ، کوچک و ارزان شدن کامپيوترها را به دنبال داشت . متعاقب اين تحول عظيم ، امکان استفاده از کامپيوتر در ابعاد بسيار گسترده و برای عموم کاربران، فراهم گرديد( کافی است به اطراف خود نگاهی داشته باشيم!) . دومين تحول عمده ، ارتباط کامپيوترها با يکديگر و بر پاسازی شبکه های کامپيوتری است . در ادامه با استفاده از فن آوری های متعدد مخابراتی و ارتباطی ، امکان اتصال و ارتباط بين شبکه های کامپيوتری ، فراهم گرديد .تحولات فوق ، زمينه انقلاب عظيم اطلاعاتی در عصر حاضر و ظهور فن آوری های متعدد اطلاعات و ارتباطات را ايجاد نموده است .

مهمترين ويژگی فن آوری اطلاعات و ارتباطات ، نحوه ذخيره سازی ، پردازش و دستيابی به اطلاعات است .

به مجموعه فن آوری هائی که امکان ذخيره سازی ، پردازش ، ارائه و انتقال اطلاعات را از طريق محيط های انتقال فراهم می نمايد ، اطلاق می گردد.

فن آوری اطلاعات و ارتباطات به جايگاه برجسته اطلاعات ، دستگاههای ذخيره سازی و پردازش اطلاعات و دستگاههای انتقال و دستيابی به اطلاعات تاکيد دارد . بديهی است در اين راستا ، علاوه بر پتانسيل های مخابراتی ، رسانه هائی ديگر نظير راديو و تلويزيون نيز در فهرست وسايل ارتباطی ( کانال نشر و توزيع اطلاعات ) ، قرار خواهند گرفت . زير ساخت فن آوری اطلاعات و ارتباطات در مرحله اول نيازمند وجود يک زيرساخت اطلاعاتی است که در آن تمامی دستگاهها و وسايل ارتباطی نظير تجهيزات مخابراتی ، راديو و تلويزيون قرار خواهند گرفت . زيرساخت اطلاعاتی به منزله فونداسيون زيرساخت فن آوری اطلاعات و ارتباطات ، مطرح بوده که امکان ارائه سرويس ها و خدمات اطلاعاتی را با کيفت مطلوب ، فراهم می نمايد. بر همين اساس می توان فن آوری اطلاعات و ارتباطات را مشتمل بر سه بخش اساسی زير در نظر گرفت :

زيرساخت اطلاعات Information Infrastructure : II
فن آوری های اطلاعات Information Technologies : IT
کاربردهای اطلاعات Information Application : IA





زير ساخت اطلاعات ( II )
در زيرساخت اطلاعات ، هدف ايجاد و گسترش امکانات زير می باشد :
شبکه ها و سرويس های مخابراتی
تکنولوژی های انتقال
سوئيچينگ و روتينگ
دستيابی و عرضه
ارتباطات چند رسانه ای ( صوت ، تصوير )

شامل :
- شبکه های موبايل ، بدون کابل
- شبکه های فيبر نوری
- سيستم های ماهواره ای
- سيستم های سخن پراکنی
- ترکيب ( تلفيق) مخابرات با سيستم های چند رسانه ای
- ارتباطات محلی با سرعت بالا
- ارتباطات شهری ، منطقه ای و ملی با سرعت بالا


فن آوری اطلاعات ( IT )
در فن آوری اطلاعات ، موارد زير مورد توجه قرار می گيرد :
ذخيره سازی اطلاعات
پردازش و ارائه اطلاعات
سيستم ها ی عامل
زبان ها ی برنامه نويسی
مهندسی پروتکل ها
نرم افزارهای کاربردی

شامل :
- پروتکل های شبکه
- شبکه های ذخيره سازی داده
- فن آوری های رمزنگاری و امنيتی
- سخت افزار( کامپيوترهای شخصی ، سرويس دهندگان و ... )
- طراحی بانک های اطلاعاتی
- زبان های ارائه محتوا در وب نظير HTML,XML
- تشخيص و پيشگيری از حملات

کاربردهای اطلاعات ( IA )
در کاربردهای اطلاعات ، موارد زير مورد توجه قرار می گيرد :
ارائه خدمات
اشتراک دانش
مديريت عمومی
سرويس های اجتماعی
راه حل های تجاری
توليد و نشر محتوا

شامل :
- آموزش
- فرصت های اقتصادی و توليد درآمد
- توسعه روستائی
- بهبود سلامت شهروندان نظير استفاده از درمان راه دور
- امنيت و مونيتورينگ مسائل زيست محيطی
- مديريت اقتصادی و دولتی
- کتابخانه های الکترونيکی
- تجارت الکترونيکی
- بانکداری الکترونيکی
- آموزش الکترونيکی
- و ...

همانگونه که ملاحظه می شود برای هر يک از بخش های سه گانه در فن آوری اطلاعات و ارتباطات ، محدوده خاصی در نظر گرفته شده است ولی در عمل تعيين دقيق اين محدوده ، امری دشوار و گاها" غيرممکن است. مثلا" برنامه های نرم افزاری در بخش فن آوری اطلاعات قرار گرفته ولی امکان پياده سازی آنان در زير مجموعه کاربردهای اطلاعات ( IA ) نيز وجود خواهد داشت .همچنين ارتباطات چندرسانه ای در زير مجموعه زيرساخت اطلاعات ( II ) قرار گرفته شده اند ولی امکان پياده سازی برخی از ويژگی های مالتی مديا در زيرمجموعه فن آوری اطلاعات ( IT ) ، نيز وجود دارد.
علیرغم عدم وجود محدوده ای مشخص و شفاف برای هر يک از عناصر موجود در بخش های سه گانه زيرساخت فن آوری اطلاعات و ارتباطات ، می توان با لحاظ نمودن وزن بکارگيری امکانات سخت افزاری و نرم افزاری در هر يک از بخش ها ، به يک مرزبندی خاص دست يافت :

عناصر زيرساخت اطلاعات ( II ) ، نيازمند استفاده از تجهيزات و امکانات فيزيکی گسترده ای نظير سيستم های سوئيچينگ ، روتينگ ، شبکه ای گسترده از خطوط تلفن ثابت ، سيار و شبکه های رادئوئی ، می باشند . در اين رابطه و به منظورانجام عمليات و مديريت زيرساخت فيزيکی متشکل از عناصر و تجهيزات سخت افزاری ،می بايست از سخت افزار و نرم افزارهای متعددی استفاده شود. با طراحی و پياده سازی زيرساخت اطلاعات ( بستر ارتباطی ) ، امکان ارتباط دستگاههای مختلفی نظير تلفن های ثابت ، تلفن های سلولی ، دستگاههای بدون کابل ، کامپيوترهای شخصی و سرويس دهندگان به شبکه فراهم و آنان قادر به استفاده از سرويس ها و خدمات مختلفی می باشند.ارتباط با زيرساخت اطلاعاتی ( ارتباطی ) ممکن است مستقيما" (از طريق شبکه ايجاد شده) و يا با استفاده از تجهيزات خاصی نظير مودم، کارت های ISDN ، خطوط DSL و يا دستگاههای بدون کابل ، ايجاد گردد. معمولا" برای سنجش ميزان شکاف ديجيتالی بين جوامع فقير و ثروتمند ، به تنوع ، تعداد و کيفيت وسايل ارتباطی به زيرساخت ، استناد می گردد . بديهی است با فرض ايجاد زير ساخت اطلاعات ، بدون وجود دستگاههای ارتباطی ( از بعد کمی و کيفی) ، امکان استفاده مطلوب و بهينه از زير ساخت و درنهايت بهره مندی از دستاوردها و پتانسيل های ارائه شده در بخش های فن آوری اطلاعات و کاربردهای اطلاعات ، وجود نخواهد داشت . دستگاههای ارتباطی ( نظير تلفن های ثابت ، سلولی ) به عنوان شرط لازم برای ورود به بزرگراه های اطلاعاتی مطرح می باشند. بديهی است تنوع ، کيفيت و مقرون به صرفه بودن دستگاههای ارتباطی ، گزينه های متعددی را به منظور استفاده از منابع اطلاعاتی در اختيار متقاضيان ، قرار می دهد .امکان دستيابی آحاد جامعه به منابع اطلاعاتی ، يکی از عناصر اصلی سيا ست گذاری در زمان تعريف استراتژی توسعه فن آوری اطلاعات و ارتباطات در هر جامعه می باشد .
+ نوشته شده در سه شنبه یازدهم اسفند 1388ساعت 15:5 توسط نیلوفر جمشیدی |

مطالب قدیمی‌تر