اگر کسی از شما بپرسد «زبان برنامه نویسی چیست؟» چه جوابی به او می دهید؟ پاسخ بسیار ساده است؛ برنامه نویسی به معنی دادن دستورالعمل به کامیپوتر ها است. از آنجایی که کامیپوتر ها هیچ زبان انسانی مانند فارسی یا انگلیسی را نمی فهمند باید زبانی را برای ارتباط با آن ها ایجاد کنیم. کامپیوتر ها به زبان صفر و یک (باینری یا دودویی) صحبت می کنند اما صحبت کردن به این زبان برای ما بسیار سخت و تقریبا غیر ممکن است. به همین خاطر انسان ها زبان های برنامه نویسی مختلف را ایجاد کرده اند تا بین زبان کامپیوتر ها (باینری) و زبان انسانی (فارسی، انگلیسی و ...) قرار بگیرند و صحبت با کامپیوتر ها را برای ما ساده تر کنند.
برخی از زبان های برنامه نویسی low level یا سطح پایین هستند. زمانی که از عبارت «سطح پایین» صحبت می کنیم، منظورمان بد بودن آن زبان برنامه نویسی نیست بلکه منظورمان نزدیک تر بودن آن زبان به زبان کامپیوتر ها است. همچنین برخی از زبان ها high level یا سطح بالا هستند که یعنی به زبان انسان ها نزدیک تر می باشند. به طور مثال assembly (یک زبان برنامه نویسی) را در نظر بگیرید؛ این زبان یک زبان کاملا low level است که یعنی به شدت به زبان کامپیوتر ها (باینری) نزدیک است و به همین دلیل یادگیری آن سخت تر از زبان های دیگر است. در طرف دیگر زبان هایی مانند جاوا اسکریپت و پایتون را داریم که به انگلیسی بسیار نزدیک هستند و یادگیری شان صد ها بار آسان تر از assembly است. هر کدام از این دو طیف استفاده های خودشان را دارند و باید در مکان خودشان استفاده شوند. زبان های سطح پایین معمولا به شما اجازه می دهند که به صورت دستی به سخت افزار دستی داشته باشید (مثلا مدیریت مموری یا RAM دستگاه) اما زبان های سطح بالا این کار ها را به صورت خودکار انجام می دهند.
در این مرحله احتمالا برایتان سوال شده است که اگر کامپیوتر ها فقط باینری می فهمند، چطور زبان های برنامه نویسی و کد هایی که ما می نویسیم را اجرا می کنند؟ پاسخ ساده است! بین زبان برنامه نویسی و کد های باینری یک مترجم قرار دارد که کد های شما را به باینری تبدیل می کند! این مترجم، بسته به نوع زبان برنامه نویسی، یکی از دو نوع مترجم زیر را دارد:
مفسر یا interpreter: همانطور که از نام این مترجم مشخص است، خط به خط کد شما را خوانده و هر خط را برای کامپیوتر به باینری ترجمه می کند. در واقع هر خط از کد شما به باینری ترجمه شده و اجرا می شود و سپس به خط بعدی رفته و همین کار را انجام می دهیم.
کامپایلر یا compiler: کامپایلر ها به جای اینکه کد هایتان را خط به خط برای کامپیوتر ترجمه کنند، همه کد را یکجا گرفته و به یک فایل باینری ترجمه می کنند. در نهایت این فایل باینری اجرا خواهد شد.
پایتون معمولا یک زبان interpreted یا تفسیر شده است بنابراین مترجم آن در دسته اول قرار می گیرد. به طور کلی می توان گفت از آنجایی که زبان های کامپایل شده مستقیما به باینری تبدیل می شوند و CPU می تواند آن ها را مستقیما اجرا کند، معمولا از زبان های دارای مفسر سریع تر هستند.
احتمالا می گویید چرا با چنین مبحث عجیبی شروع کرده ام؟ برای شروع کدنویسی باید تفاوت این دو را بدانید و متوجه باشید که نمی توانیم در هر جایی از سیستم که خواستیم کدهای پایتون بنویسیم! ما باید مترجمی را که بالاتر توضیح دادم دانلود کنیم تا دستوراتمان را برای کامپیوتر ترجمه کند. برای دانلود مترجم پایتون به وب سایت رسمی آن، یعنی www.python.org، مراجعه می کنیم اما فعلا در این فصل چنین کاری را نخواهیم کرد!
همانطور که گفتم، پایتون برای اجرا روی سیستم ما نیاز به یک مترجم دارد اما درست مانند دنیای واقعی مترجم های زیادی برای یک زبان وجود دارند. در وب سایت رسمی پایتون از مترجمی به نام cPython استفاده می کنیم که به زبان C نوشته شده است. درست است! پایتون خودش با زبان C نوشته شده است تا کار ما را ساده تر کند. می توان گفت C نسبت به پایتون یک زبان low level محسوب می شود. این در حالی است که مترجم های دیگری نیز برای پایتون وجود دارند که با زبان های دیگری نوشته شده اند. به طور مثال Jython پروژه ای است که اسکریپت های پایتون را برای جاوا ترجمه می کند یا به طور مثال IronPython که برای فریم ورک NET. نوشته شده است. بنابراین مهم است که بدانید در حال چه کاری هستیم و برای چه این کار ها را انجام می دهیم. برنامه نویسان خوب، از پشت صحنه نیز خبر دارند.
حالا با دو گزینه روبرو هستیم: دانلود مفسر پایتون و نصب آن روی سیستم، استفاده از سیستم های آماده آنلاین. دانلود مفسر پایتون نیاز به داشتن اطلاعات مختلف و آموزش دارد اما ما تازه می خواهیم شروع کنیم. به همین دلیل ما فصل ابتدایی پایتون (مفاهیم برنامه نویسی) را در ادیتورهای آنلاین انجام می دهیم تا نیازی به پیکربندی و مسائل جانبی نداشته باشیم. پس از فصل اول و یادگیری مباحث اولیه پایتون به سراغ ویریشگرهای کد و IDE ها می رویم و از آنجا به بعد را در سیستم خودمان کدنویسی خواهیم کرد. ما از این سرویس های آنلاین فقط برای راحتی کار در شروع یادگیری استفاده می کنیم اما در پروژه های واقعی باید همیشه از یک محیط توسعه روی سیستم خود استفاده نمایید. من چند سرویس برای این کار را به شما معرفی می کنم و شما می توانید از هر کدام که خواستید استفاده کنید:
شما می توانید وارد هرکدام از وب سایت های بالا شده و با من شروع به نوشتن کدهای پایتون کنید. مطمئن باشید که شروع کار بدین شکل برایتان راحت تر خواهد بود چرا که به هیچ ویرایشگر و نرم افزاری نیاز نخواهیم داشت. من شخصا از وب سایت repl.it استفاده می کنم؛ کافی است به این سایت رفته و ثبت نام کنید و سپس از قسمت بالا و سمت راست صفحه روی علامت + کلیک کرده و یک فایل py (پسوند فایل های پایتون) ایجاد کنید. تصاویر زیر نحوه انجام این کار را به شما نشان می دهند:
البته در نظر داشته باشید که هیچ الزامی به استفاده از repl.it نیست بلکه می توانید از هرکدام از سرویس های بالا استفاده کنید.
اولین کدی که در این دوره می نویسیم، چاپ کردن نام خودمان است! برای چاپ کردن یک مقدار از تابعی به نام print استفاده می کنیم. توابع در واقع مجموعه ای از کدها هستند که یک کار خاص را انجام می دهند و برای راحتی کار من و شما نوشته شده اند:
print('Amir Zouerami')
حالا زمانی که این کد را اجرا کنم (روی دکمه run در وسط و بالای صفحه کلیک کنید)، عبارت Amir Zouerami در پنل سمت راست برایم چاپ می شود اما شما می توانید هر مقدار دیگری را به جای آن استفاده کنید. به عبارتی این تک خط ساده، اولین برنامه ما در این دوره است! در اینجا چه اتفاقی افتاده است؟ ما ابتدا کد خود را نوشتیم، سپس بسته به وب سایتی که استفاده می کنید روی دکمه run یا کلید enter کلیک کرده ایم. با انجام این کار کدهای ما به مفسر پایتون ارسال می شود و مفسر کدها را به bytecode تبدیل می کند که نوعی کد بسیار نزدیک به باینری است. در نهایت این bytecode تولید شده، در cpython vm (یک ماشین مجازی در مفسر پایتون) به صورت باینری اجرا می شود و رشته Amir Zouerami را برای ما چاپ می کند.
این اسم من است اما اگر اسم شما را بخواهیم چطور؟ چطور می توانیم کاری کنیم که هر کس اسم خودش را به پایتون بدهد؟ برای انجام این کار از تابعی به نام input استفاده می کنیم:
input('What is your name?')
تابع input از ما می پرسد که نام ما چیست (what is your name) و ما می توانیم نام خود را وارد کنیم اما اتفاقی نمی افتد. حالا از شما سوالی دارم؛ اگر این دو تابع را با هم ترکیب کنیم چه اتفاقی می افتد؟ ما می توانیم نام را گرفته و در یک متغیر ذخیره کنیم. متغیر ها مانند ظرف هایی هستند که داده ها را در خود ذخیره می کنند. منظور من از داده هر نوع اطلاعاتی است، مثلا نام یک ماشین، آدرس یک سایت اینترنتی، شماره بلیط شما و الی آخر. به مثال زیر توجه کنید:
name = input('what is your name?') print(name)
همانطور که می بینید ما تابع input را صدا زده ایم (یعنی ()input را نوشته ایم - به این کار صدا زدن یا فراخوانی می گویند) بنابراین input از کاربر می پرسد what is your name (نام شما چیست؟) و کاربر نام خود را وارد خواهد کرد. پس از اینکه کاربر نامش را وارد کند تابع input آن را گرفته و در متغیری به نام name قرار می دهد. زمانی که اطلاعاتی را در یک متغیر قرار می دهیم یعنی آن اطلاعات در مموری (RAM کامیپوتر شما) به صورت موقت ذخیره می شود تا بعدا از آن استفاده کنیم. name نام متغیری است که من انتخاب کرده ام چرا که می خواهیم «نام» یک نفر را در آن بگذاریم اما شما می توانید هر نام دیگری را برای متغیرتان انتخاب کنید. مثلا اگر می خواستیم مدل یک ماشین را در متغیری ذخیره کنیم نامش را چیزی شبیه به carModel (یعنی «مدل ماشین») می گذاشتیم:
carModel = 'BMW i3'
حالا به کد خودمان توجه کنید:
name = input('what is your name?') print(name)
ما نام یک نفر را در name ذخیره می کنیم و سپس می توانیم تابع print را صدا زده و این نام را به آن بدهیم. حالا روی دکمه Run کلیک کنید. با این کار در پنل سمت راست از شما پرسیده می شود که what is your name و شما باید در همین پنل نام خود را تایپ کنید (مثلا Amir Zouerami) و سپس enter را فشار می دهید. با این کار همین نام برایتان چاپ می شود:
تفاوت این روش با روش قبلی این است که حالا هر کسی می تواند نام خودش را وارد کند و دیگر به یک نام خاص محدود نیستیم. حتی می توانیم این کد را کمی بهتر بنویسیم:
name = input('what is your name?') print('Hello' + name)
در واقع در این قسمت گفته ایم عبارت Hello به نام کاربر اضافه شود (علامت +) تا به جای چاپ نام کاربر به صورت خالی، چیزی مثل Hello Amir (سلام امیر) را داشته باشیم. اگر کد بالا را اجرا کنیم (کلیک روی دکمه run در بالای صفحه) دوباره نام ما پرسیده می شود و بعد از نوشتن نام و فشردن کلید enter چنین نتیجه ای می گیریم:
HelloAmir
چرا hello و Amir به هم چسبیده اند؟ به دلیل اینکه هیچ فاصله ای بین آن ها نگذاشته ایم. کامیپوتر ها نمیدانند کلمات چه هستند بنابراین یک سری کاراکتر انگلیسی را می بینند و به هم می چسبانند و معنی اش را نمی دانند. برای حل این مشکل یک اسپیس را به hello اضافه می کنیم:
name = input('what is your name?') print('Hello ' + name)
این یک اسپیس مشکل ما را حل می کند. در ضمن اگر متوجه برخی از دستورات بالا نمی شوید نگران نباشید. ما در جلسات آینده به صورت کامل در مورد این مباحث صحبت خواهیم کرد.
زمانی که از زبان پایتون صحبت می کنیم حتما بحث «نسخه دوم یا نسخه سوم» را خواهید شنید و شاید از خودتان بپرسید مگر زبان های برنامه نویسی نیز نسخه های مختلفی دارند؟ پاسخ مثبت است! زبان های برنامه نویسی نیز مانند یک نرم افزار مرتب به روز رسانی شده و عملکردشان بهتر می شود. زبان پایتون در سال ۱۹۹۱ توسط آقای Guido van Rossum نوشته شد و در سال ۲۰۰۸ آقای Guido تصمیم گرفت نسخه سوم پایتون (Python3) را بنویسد. به یاد داشته باشید زمانی که از نسخه دوم یا سوم حرف می زنیم منظورمان همان CPython یا مفسر پایتون است. این به روز رسانی دارای breaking changes بود، یعنی تغییراتی داشت که باعث از کار افتادن کدهایی می شد که بر اساس نسخه دوم پایتون نوشته شده بودند بنابراین برخی از کمپانی ها کدهای خود را به روز رسانی نکرده و از همان نسخه ۲ استفاده کردند. با این حال از سال ۲۰۲۰ نسخه دوم پایتون دیگر به روز رسانی های امنیتی را دریافت نخواهد کرد بنابراین ما در این دوره از نسخه سوم استفاده خواهیم کرد.
من این توضیحات را برایتان دادم تا اگر در اینترنت در حال جست و جوی سوالی بودید و به پاسخی قدیمی برخورد کردید، بدانید که بین نسخه دوم و نسخه ای که ما در این دوره استفاده می کنیم (نسخه سوم) تفاوت هایی وجود دارد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.