طراحی بلوک

در طول سال ها، تیم Blockly بسیاری از بلوک های خود را طراحی کرده و به دیگران کمک کرده است تا بلوک های خود را طراحی کنند. در ادامه برخی از درس هایی که آنها آموخته اند آمده است.

بلوک های سطح بالا را ترجیح دهید

تا جایی که ممکن است باید رویکردی در سطح بالاتر اتخاذ شود، حتی اگر عملکرد یا انعطاف‌پذیری اجرا را کاهش دهد. این عبارت Apps Script را در نظر بگیرید:

SpreadsheetApp.getActiveSheet().getDataRange().getValues()

تحت یک نقشه برداری 1:1 که تمام قابلیت های بالقوه را حفظ می کند، عبارت فوق با استفاده از چهار بلوک ساخته می شود. اما Blockly یک سطح بالاتر را هدف قرار می دهد و یک بلوک را ارائه می دهد که کل عبارت را در بر می گیرد. هدف، بهینه سازی برای 95٪ مورد است، حتی اگر 5٪ باقیمانده را دشوارتر کند. Blockly قرار نیست جایگزینی برای زبان‌های مبتنی بر متن باشد، بلکه در نظر گرفته شده است که به کاربران کمک کند تا از منحنی یادگیری اولیه عبور کنند تا بتوانند از زبان‌های مبتنی بر متن استفاده کنند.

توصیه: کورکورانه کل API خود را به بلوک تبدیل نکنید.

انتخاب های ورودی کاربر را در نظر بگیرید

سه بلوک تکراری که روش‌های مختلف برای وارد کردن یک عدد را نشان می‌دهند: کشویی، فیلد عددی و مقدار ورودی

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

توصیه: یک روش ورودی مناسب برای کاربران خود انتخاب کنید.

از بلوک های شرطی و حلقه جداگانه استفاده کنید

مثالی که بلوک‌های if/then و while را به صورت یکسان نشان می‌دهد دسته بندی

سخت ترین بلوک ها برای کاربران جدید شرطی ها و حلقه ها هستند. بسیاری از محیط‌های مبتنی بر بلوک، هر دوی این بلوک‌ها را در یک دسته «کنترل‌ها» دسته‌بندی می‌کنند که هر دو بلوک دارای شکل و رنگ یکسان هستند. این اغلب منجر به ناامیدی می شود زیرا کاربران جدید این دو بلوک را اشتباه می گیرند. Blockly توصیه می‌کند که شرط‌ها و حلقه‌ها را به دسته‌های «Logic» و «Loops» جداگانه منتقل کنید که هر کدام رنگ‌های متفاوتی دارند. این روشن می کند که این ایده های متمایز هستند که با وجود داشتن اشکال مشابه، رفتار متفاوتی دارند.

توصیه: شرطی ها و حلقه ها را از هم جدا نگه دارید.

تعداد متغیری از ورودی ها را مدیریت کنید

بلوک های خاص ممکن است به تعداد متغیر ورودی نیاز داشته باشند. به عنوان مثال، یک بلوک جمعی که مجموعه دلخواه اعداد را جمع می کند، یا یک بلوک if/elseif/else با مجموعه دلخواه از عبارت های elseif، یا یک سازنده لیست با تعداد دلخواه از عناصر اولیه هستند. چندین استراتژی وجود دارد که هر کدام مزایا و معایب خود را دارند.

الف) ساده ترین روش این است که کاربر را وادار کنیم بلوک را از بلوک های کوچکتر بسازد. به عنوان مثال می توان سه عدد را با تودرتو کردن دو بلوک جمع دو عددی جمع کرد. مثال دیگر فقط ارائه بلوک‌های if/else و ساختن کاربر برای ایجاد شرایط elseif است.

بلوک های جمع تودرتو: 1 + (2 + 3).

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

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

بلوکی که چهار ورودی مقدار را اضافه می کند که آخرین مورد آن است خالی

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

ج) برای حل مشکل حفره، برخی از توسعه دهندگان دکمه های +/- را به بلوک ها اضافه می کنند که به صورت دستی ورودی ها را اضافه یا حذف می کنند. Open Roberta از دو دکمه برای افزودن یا حذف ورودی ها از پایین استفاده می کند. سایر توسعه دهندگان دو دکمه در هر ردیف اضافه می کنند تا درج و حذف از وسط پشته امکان پذیر باشد. دیگران دو دکمه بالا/پایین را در هر ردیف اضافه می‌کنند تا ترتیب مجدد پشته انجام شود.

بلوکی که سه ورودی مقدار خارجی اضافه می کند و دارای دکمه های مثبت و منفی است ورودی ها را اضافه یا حذف کنید

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

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

بلوکی که سه ورودی مقدار اضافه می کند و دارای یک جهش دهنده برای افزودن یا حذف است ورودی های ارزش

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

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