بلوک در مقابل زبان های مبتنی بر متن

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

از لیست های تکی استفاده کنید

بلوکی که حرف را در یک شاخص خاص در یک رشته انتخاب می کند و از 1 استفاده می کند به معنای حرف اول

برنامه نویسان تازه کار وقتی برای اولین بار با لیست های مبتنی بر صفر مواجه می شوند، واکنش بدی نشان می دهند. در نتیجه، Blockly از Lua و Lambda Moo با فهرست‌بندی و فهرست‌بندی رشته‌ای به‌صورت یک‌پایه پیروی می‌کند.

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

توصیه: یک عدد اول است.

از قوانین نامگذاری لیبرال حمایت کنید

بلوک هایی با نام متغیر حساس به حروف بزرگ و کوچک location_x (حروف کوچک x) و location_X (حروف بزرگ X).

برنامه نویسان مبتدی انتظار ندارند که location_X و location_x متغیرهای متفاوتی باشند. در نتیجه، Blockly از BASIC و HTML با غیر حساس کردن متغیرها و توابع به حروف بزرگ پیروی می کند. Scratch از رویکرد ظریف تری استفاده می کند (همانطور که در سمت راست مشاهده می شود) و برای نام متغیرها به حروف بزرگ و کوچک حساس است اما برای بررسی برابری حساس نیست.

همچنین، Blockly نیازی به مطابقت متغیرها و توابع با طرح معمولی [_A-Za-z][_A-Za-z0-9]* ندارد. اگر کسی بخواهد یک متغیر List of zip codes یا רשימת מיקודים نامگذاری کند کاملاً مشکلی ندارد.

توصیه: از حروف بزرگ صرف نظر کنید، هر نامی را مجاز کنید.

همه متغیرها را جهانی کنید

برنامه نویسان تازه کار نیز در درک محدوده مشکل دارند. در نتیجه، Blockly با جهانی کردن همه متغیرها از Scratch پیروی می کند. تنها جنبه منفی متغیرهای سراسری این است که بازگشت پیچیده‌تر است (شخص باید متغیرها را فشار داده و در فهرست قرار دهد)، اما این یک تکنیک برنامه‌نویسی است که فراتر از محدوده کاربران هدف Blockly است.

توصیه: محدوده خارج از محدوده است، آن را برای بعد بگذارید.

نحوه رسیدگی به مقادیر بازگشتی اختیاری را در نظر بگیرید

بسیاری از توابع در برنامه نویسی مبتنی بر متن یک عمل را انجام می دهند، سپس یک مقدار را برمی گردانند. این مقدار بازگشتی ممکن است استفاده شود یا نباشد. یک مثال تابع pop() پشته است. Pop ممکن است برای دریافت و حذف آخرین عنصر فراخوانی شود، یا ممکن است برای حذف آخرین عنصر با نادیده گرفتن مقدار بازگشتی فراخوانی شود.

var last = stack.pop();  // Get and remove last element.
stack.pop();  // Just remove last element.

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

الف) مشکل را حل کنید. بیشتر زبان‌های مبتنی بر بلوک، زبان را برای اجتناب از این موارد طراحی می‌کنند. به عنوان مثال، Scratch هیچ بلوکی ندارد که هم عوارض جانبی و هم مقدار بازگشتی داشته باشد.

ب) دو بلوک ارائه دهید. اگر فضای جعبه ابزار مشکلی نیست، یک راه حل ساده این است که دو مورد از هر یک از این نوع بلوک ها را فراهم کنید، یکی با و دیگری بدون مقدار بازگشتی. نقطه ضعف این است که این می تواند به یک جعبه ابزار گیج کننده با تعداد زیادی بلوک تقریباً یکسان منجر شود.

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

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

بلوکی که هنگام حذف از یک بلوک مقدار به یک بلوک بیانیه تغییر شکل می دهد آخرین مورد در یک لیست، بسته به اینکه آیا آن را نیز برمی گرداند مورد

د) ارزش را بخورید. اولین نسخه App Inventor یک بلوک لوله مخصوص ایجاد کرد که هر مقدار متصل را می خورد. کاربران این مفهوم را درک نکردند و نسخه دوم App Inventor بلوک لوله را حذف کرد و به جای آن توصیه کرد که کاربران به سادگی مقدار را به یک متغیر دور ریخته اختصاص دهند.

بلوک هایی که دو روش مختلف برای نادیده گرفتن خروجی یک بلوک را نشان می دهند. اولین از یک بلوک لوله برای "خوردن" مقدار استفاده می کند و دومی مقدار یک متغیر را تنظیم می کند به نام "آشغال".

توصیه: هر استراتژی دارای مزایا و معایب است، آنچه را که برای کاربران شما مناسب است انتخاب کنید.

کد قابل خواندن تولید کنید

کاربران پیشرفته Blockly باید بتوانند به کد تولید شده (جاوا اسکریپت، پایتون، پی اچ پی، لوا، دارت و غیره) نگاه کنند و فوراً برنامه ای را که نوشته اند تشخیص دهند. این بدان معناست که باید تلاش بیشتری برای خوانایی این کد تولید شده توسط ماشین انجام شود. پرانتزهای اضافی، متغیرهای عددی، فضاهای خالی خرد شده و الگوهای کد پرمخاطب، همگی مانع از تولید کد ظریف می شوند. کد تولید شده باید شامل نظرات باشد و باید با راهنماهای سبک Google مطابقت داشته باشد.

توصیه: به کد تولید شده خود افتخار کنید. آن را به کاربر نشان دهید.

تفاوت زبان ها را بپذیرید

یک عارضه جانبی تمایل به کد پاک این است که رفتار Blockly تا حد زیادی بر اساس نحوه رفتار زبان متقابل کامپایل شده تعریف می شود. رایج‌ترین زبان خروجی جاوا اسکریپت است، اما اگر Blockly به زبان دیگری کامپایل می‌کند، هیچ تلاش غیرمنطقی برای حفظ رفتار دقیق در هر دو زبان نباید انجام شود. به عنوان مثال، در جاوا اسکریپت یک رشته خالی false است، در حالی که در Lua درست است. تعریف یک الگوی رفتاری واحد برای اجرای کد Blockly بدون توجه به زبان مقصد، منجر به ایجاد کد غیرقابل نگهداری می شود که به نظر می رسد از کامپایلر GWT خارج شده است.

توصیه: Blockly یک زبان نیست، اجازه دهید زبان موجود بر رفتار تأثیر بگذارد.