رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چطور مثل یک حرفه‌ای برنامه بنویسیم – بخش اول: انتخاب نام برای متغیرها
#1
نوشتن برنامه برای حل کردن مسایل دنیای واقعی با استفاده از کامپیوتر کار بسیار پیچیده‌ای است و برنامه‌نویس‌ها باید هر کاری می‌توانند انجام دهند تا این پیچیدگی کم شود. یکی از این پیچیدگی‌ها این است که در هر برنامه تعداد زیادی متغیر تعریف می‌شود. حتی اگر برنامه کوچک باشد هیچ‌کس به خاطر نمی‌آورد که متغیر x که در فلان سطر از فلان فایل استفاده شده است کجا تعریف شده است، چرا تعریف شده است، چه مقداری در آن ذخیره می‌شود، و …

برای این‌که پیچیدگی برنامه‌ها کم‌تر شود باید کاری کرد که افرادی که کد را می‌خوانند (چه به قصد فهمیدن، چه به قصد رفع اشکال، چه به قصد بهبود دادن) به سادگی بتوانند بفهند که هر متغیر به چه منظور تعریف شده و چه مقداری در أن ذخیره می‌شود.

در یکی از سطرهای این برنامه این دستور را می‌توانید پیدا کنید:

کد پی‌اچ‌پی:
3

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

این دو دستور را با هم مقایسه کنید:

کد پی‌اچ‌پی:
3

و

کد پی‌اچ‌پی:
subStringLength 3

یا حتی اگر به جز زبان مادری خود زبان دیگری نمی‌دانید

کد پی‌اچ‌پی:
touleZirReshte 3

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

متاسفانه در این کدِ این برنامه این نوع متغیرها کم نیستند. i , j , m , temp, sub. دلیل این امر شاید به فرهنگ نادرستی بر‌می‌گردد که توسط کتاب‌های آموزش برنامه‌نویسی ترویج داده می‌شود. بسیاری از کتاب‌های آموزش برنامه‌نویسی نام‌های این‌چنینی برای متغیرها انتخاب می‌کنند. بخشی از أن هم به فرهنگی بر می‌گردد که در بین ریاضی‌دان‌ها استفاده می‌شود. ریاضی‌دان‌ها معمولا از نمادهای تک حرفی برای بیان روابط و معادله‌ها استفاده می‌کنند. اما کد یک برنامه‌ی کامپیوتری با اثبات یک قضیه ریاضی خیلی تفاوت دارد و نباید از فرهنگ رایج ریاضی‌دان‌ها برای نوشتن برنامه‌های کامپیوتری استفاده کرد (مگر أن‌که به ساده‌تر شدن مساله کمک کند).

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

کد پی‌اچ‌پی:
query(inputk); 

به نظر شما این دستور چه کاری انجام می‌دهد؟ آیا k بار برای پیدا کردن input جست و جو انجام می‌دهد؟ آیا در کاراکتر kام input جست و جو انجام می‌دهد؟ آیا …

برای پیدا کردن جواب باید حتما به جایی که متغیرهای k و input و تابع query تعریف شده است مراجعه کنید و توضیحات مربوط به أن‌ها را بخوانید (اگر خوش‌شانس باشید). حالا دستور زیر را در نظر بگیرید.

کد پی‌اچ‌پی:
splitIntoSubstrings(inputStringsubstringLength); 

به سادگی می‌توان فهمید که این دستور رشته‌ی inputString را به زیر رشته‌هایی با طول substringLength تقسیم می‌کند.

همین موضوع در مورد سایر تابع‌ها به خصوص تابع compute صدق می‌کند. برای مثال دستور زیر را در نظر بگیرید.

کد پی‌اچ‌پی:
compute(str.substring(m).concat(str.substring(0len - (strLen m)))); 

در مورد این‌که این دستور بیش‌تر به یک فاجعه شباهت دارد تا یک دستور که توسط یک برنامه‌نویس خوب نوشته می‌شود خیلی حرف دارم و احتمالا یک پست مجزا در مورد آن خواهم نوشت. ولی در حال حاضر فقط این موضوع را یادآوری می‌کنم که یکی از بدترین اسم‌هایی که برای یک تابع می‌توان انتخاب کرد همین compute است. برخی دیگر از این اسامی عبارتند از process, analyze, calculate, do, perform, init, initilize, start. این نام‌ها به این دلیل نامناسب هستند که هیچ اطلاعاتی در مورد اینکه این تابع‌ها چه کاری انجام می‌دهند به فردی که کد را می‌خواند منتقل نمی‌کنند. همه می‌دانند که هر تابعی بلاخره یک چیزی را حساب (compute) می‌کند، مهم این است که بدانند این تابع چه چیزی را حساب می‌کند.

منبع
[عکس: <a href=www.Mojsazan.com.gif]" class="mycode_img" />
پاسخ
سپاس شده توسط behnaz ، علی عرفانی ، Nikkhahan ، mersadblue


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  اثبات وجود خدا برای صنف برنامه نویس مهرداد عباسی 1 4,425 12-03-2015, 10:23 PM
آخرین ارسال: abolfazl35
  چرا هزینه های برنامه نویسی بالاست؟ مهرداد عباسی 0 2,153 04-21-2015, 04:58 AM
آخرین ارسال: مهرداد عباسی
  چرا هزینه های برنامه نویسی بالاست؟ مهدی ابراهیمی 0 3,010 06-27-2014, 11:34 PM
آخرین ارسال: مهدی ابراهیمی
  میوه فروشی بهتر است یا برنامه نویسی؟؟؟؟؟؟؟؟ مهرداد عباسی 11 13,249 02-17-2014, 05:05 PM
آخرین ارسال: مهدی ابراهیمی
  داستان یک برنامه نویس که از علم بازاریابی چیزی نمی دانست مهرداد عباسی 0 2,517 11-09-2013, 07:11 PM
آخرین ارسال: مهرداد عباسی
Question انتخاب یک زبان جامع برنامه نویسی موبایل - اپلیکیشن - وب - هوش digicom 19 22,282 08-25-2013, 07:10 PM
آخرین ارسال: مهدی ابراهیمی
  خودآموز برنامه نویسی در ۱۰ سال علیرضا حر 0 3,202 06-21-2013, 05:16 AM
آخرین ارسال: علیرضا حر
  ۱۰ توصیه برتر برای تست کاربردپذیری نرم افزار مهرداد عباسی 0 2,395 06-10-2013, 03:49 AM
آخرین ارسال: مهرداد عباسی
Tongue کامپایل و اجرای برنامه های جاوا در کنسول علی عرفانی 0 2,499 05-30-2013, 04:27 PM
آخرین ارسال: علی عرفانی
  اگر نجارها همونطوری استخدام می شدن که برنامه نویس ها استخدام می شن مهرداد عباسی 0 2,557 03-21-2013, 09:10 PM
آخرین ارسال: مهرداد عباسی

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان