آیا کُدها از چپ به راست نوشته می‌شوند؟ (برداشتی اشتباه در برنامه‌نویسان مبتدی)

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

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

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

و حالا اصل مطلب

چرا اصلا این مثال را زدیم؟ به اول مثال برمی‌گردیم. اگر از شما خواسته می‌شد این ماشین را طراحی کنید، آیا در همان ابتدا، مستقیما از طراحی خود ماشین شروع نمی‌کردید؟ (یعنی برعکس مراحل بالا). منظور این است که امکان دارد ذهن ما، ترتیب مراحل "تولید و ساخت" یک چیز را با ترتیب مراحل "فکر کردن" درباره ساخت آن چیز اشتباه بگیرد. برنامه نویسی هم بسیار به این مثال شبیه است ! اینکه یک کد از چپ به راست نوشته/خوانده می‌شود، دلیل نمی‌شود که شما هم با همین ترتیب به آن فکر کنید! به عکس زیر دقت کنید:

ذخیره سازی یک
ذخیره سازی یک "اسم" در دیتابیس MongoDB

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

const result

با این کد، کل فرایند ذخیره سازی در متغیری بنام "result" ذخیره می‌شود (تا در ادامه بتوان با همین نام از آن استفاده کرد و نتیجه‌ی آن را برحسب نیاز استفاده و پردازش کرد)

await

با این کد، به برنامه دستور داده می‌شود تا منتظر فرایند ذخیره‌سازی بماند (و تا زمانی که نتیجه عملیات ذخیره‌سازی مشخص نشد به خط بعدی نرود)

name.save()

با این کد، به برنامه دستور داده می‌‌شود تا "اسم" را ذخیره کند!

و حالا با نگاهی متفاوت ...

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

اولویت فکری برای ذخیره سازی یک
اولویت فکری برای ذخیره سازی یک "اسم" در دیتابیس MongoDB


حالا دوباره و از نو به این فکر کنید که اگر هدف ما "ذخیره سازی یک اسم در دیتابیس" باشد، اولین کدی که به ذهن ما می‌رسد کدام است؟! بله... کد زیر:

name.save()

توضیح این کد چه بود؟

با این کد، به برنامه دستور داده می‌‌شود تا "اسم" را ذخیره کند!

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

await name.save()

همانطور که در بالا گفتیم:

با این کد، به برنامه دستور داده می‌شود تا منتظر فرایند ذخیره‌سازی بماند (و تا زمانی که نتیجه عملیات ذخیره‌سازی مشخص نشد به خط بعدی نرود)

و حالا در ذهن خودمان تصمیم می‌گیریم تا "این فرایند را در جایی ذخیره کنیم" تا بتوانیم از آن در خطوط بعدی استفاده کنیم. بله جواب خودش ظاهر می‌شود! حالا در سمت چپ کد، const result را اضافه می‌کنیم تا آن را با نام result ذخیره کرده باشیم:

const result = await name.save()

کلام پایانی

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

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

اگر این مطلب را دوست داشتید، می‌توانید من را در LinkedIn‌ دنبال کنید.