বছরের পর বছর ধরে, ব্লকলি টিম তাদের নিজস্ব অনেক ব্লক ডিজাইন করেছে এবং অন্যদেরকে তাদের ডিজাইন করতে সাহায্য করেছে। তারা শিখেছে এমন কিছু পাঠ নিচে দেওয়া হল।
উচ্চ-স্তরের ব্লক পছন্দ করুন
যেখানেই সম্ভব একটি উচ্চ-স্তরের পন্থা অবলম্বন করা উচিত, এমনকি যদি এটি কার্যকরী কর্মক্ষমতা বা নমনীয়তা হ্রাস করে। এই অ্যাপস স্ক্রিপ্ট এক্সপ্রেশন বিবেচনা করুন:
SpreadsheetApp.getActiveSheet().getDataRange().getValues()
একটি 1:1 ম্যাপিংয়ের অধীনে যা সমস্ত সম্ভাব্য ক্ষমতা সংরক্ষণ করে, উপরের অভিব্যক্তিটি চারটি ব্লক ব্যবহার করে নির্মিত হবে। কিন্তু Blockly একটি উচ্চ-স্তরের জন্য লক্ষ্য করে এবং একটি ব্লক প্রদান করে যা সমগ্র অভিব্যক্তিকে এনক্যাপসুলেট করে। লক্ষ্য হল 95% ক্ষেত্রে অপ্টিমাইজ করা, এমনকি যদি এটি বাকি 5%কে আরও কঠিন করে তোলে। ব্লকলি পাঠ্য-ভিত্তিক ভাষার প্রতিস্থাপনের উদ্দেশ্যে নয়, এটি ব্যবহারকারীদের প্রাথমিক শিক্ষার বক্ররেখা অতিক্রম করতে সাহায্য করার উদ্দেশ্যে তৈরি করা হয়েছে যাতে তারা পাঠ্য-ভিত্তিক ভাষা ব্যবহার করতে পারে।
সুপারিশ: অন্ধভাবে আপনার সম্পূর্ণ API কে ব্লকে রূপান্তর করবেন না।
ব্যবহারকারীর ইনপুট পছন্দ বিবেচনা করুন
ব্যবহারকারীর কাছ থেকে একটি পরামিতি প্রাপ্ত করার তিনটি উপায় আছে। একটি ড্রপডাউন সবচেয়ে সীমাবদ্ধ এবং সাধারণ টিউটোরিয়াল এবং অনুশীলনের জন্য ভাল। একটি ইনপুট ক্ষেত্র আরও স্বাধীনতার অনুমতি দেয় এবং আরও সৃজনশীল কার্যকলাপের জন্য ভাল। একটি মান ব্লক ইনপুট (সাধারণত একটি ছায়া ব্লকের সাথে) শুধুমাত্র একটি স্ট্যাটিক মান হওয়ার পরিবর্তে একটি মান (যেমন একটি র্যান্ডম জেনারেটর) গণনা করার সুযোগ দেয়।
সুপারিশ: আপনার ব্যবহারকারীদের জন্য উপযুক্ত একটি ইনপুট পদ্ধতি চয়ন করুন।
পৃথক শর্তাধীন এবং লুপ ব্লক ব্যবহার করুন
নতুন ব্যবহারকারীদের জন্য সবচেয়ে কঠিন ব্লক হল শর্তসাপেক্ষ এবং লুপ। অনেক ব্লক-ভিত্তিক পরিবেশ এই উভয় ব্লককে একই 'নিয়ন্ত্রণ' বিভাগে গোষ্ঠীভুক্ত করে, উভয় ব্লকের আকৃতি এবং একই রঙ একই থাকে। এটি প্রায়শই হতাশার দিকে পরিচালিত করে কারণ নতুন ব্যবহারকারীরা দুটি ব্লককে বিভ্রান্ত করে। Blockly কন্ডিশনাল এবং লুপগুলিকে আলাদা 'লজিক' এবং 'লুপস' বিভাগে সরানোর সুপারিশ করে, প্রতিটি আলাদা রঙের সাথে। এটি স্পষ্ট করে যে এগুলি স্বতন্ত্র ধারণা যা একই রকম আকার থাকা সত্ত্বেও ভিন্নভাবে আচরণ করে।
সুপারিশ: শর্তসাপেক্ষ এবং লুপ আলাদা রাখুন।
ইনপুট একটি পরিবর্তনশীল সংখ্যা হ্যান্ডেল
কিছু ব্লকের জন্য পরিবর্তনশীল সংখ্যক ইনপুট প্রয়োজন হতে পারে। উদাহরণ হল একটি সংযোজন ব্লক যেটি সংখ্যার একটি নির্বিচারে সেট, অথবা একটি if/elseif/else ব্লকের সাথে elseif ক্লজের একটি নির্বিচারে সেট, অথবা একটি তালিকা কনস্ট্রাক্টর যার ইচ্ছামত সংখ্যার প্রাথমিক উপাদান রয়েছে। বেশ কয়েকটি কৌশল রয়েছে, যার প্রত্যেকটির সুবিধা এবং অসুবিধা রয়েছে।
ক) সহজ পদ্ধতি হল ব্যবহারকারীকে ছোট ব্লক থেকে ব্লক রচনা করা। একটি উদাহরণ হল দুটি দুই-সংখ্যার সংযোজন ব্লক বাসা বাঁধার মাধ্যমে তিনটি সংখ্যা যোগ করা হবে। আরেকটি উদাহরণ হল শুধুমাত্র if/else ব্লক প্রদান করা এবং ব্যবহারকারীকে elseif শর্ত তৈরি করার জন্য নেস্ট করা।
এই পদ্ধতির সুবিধা হল এর প্রাথমিক সরলতা (ব্যবহারকারী এবং বিকাশকারী উভয়ের জন্য)। অসুবিধা হল যে ক্ষেত্রে যেখানে প্রচুর সংখ্যক নেস্টিং রয়েছে, কোডটি খুব কষ্টকর এবং ব্যবহারকারীর পক্ষে পড়া এবং বজায় রাখা কঠিন হয়ে পড়ে।
খ) একটি বিকল্প হল ব্লকটিকে গতিশীলভাবে প্রসারিত করা যাতে সর্বদা শেষে একটি বিনামূল্যে ইনপুট থাকে। একইভাবে, ব্লকটি শেষ ইনপুট মুছে দেয় যদি শেষে দুটি ফ্রি ইনপুট থাকে। অ্যাপ উদ্ভাবকের প্রথম সংস্করণটি ব্যবহার করা এই পদ্ধতি।
যে ব্লকগুলি স্বয়ংক্রিয়ভাবে বৃদ্ধি পেয়েছে তা কয়েকটি কারণে অ্যাপ উদ্ভাবকের ব্যবহারকারীরা অপছন্দ করেছেন৷ প্রথমত, সর্বদা একটি বিনামূল্যের ইনপুট ছিল এবং প্রোগ্রামটি কখনই 'সম্পূর্ণ' ছিল না। দ্বিতীয়ত, স্ট্যাকের মাঝখানে একটি উপাদান ঢোকানো হতাশাজনক ছিল কারণ এটি সম্পাদনার নীচের সমস্ত উপাদান সংযোগ বিচ্ছিন্ন করা এবং তাদের পুনরায় সংযোগ করা জড়িত। যে বলে, যদি অর্ডার গুরুত্বপূর্ণ না হয়, এবং ব্যবহারকারীদের তাদের প্রোগ্রামে গর্ত দিয়ে আরামদায়ক করা যায়, এটি একটি খুব সুবিধাজনক বিকল্প।
গ) গর্ত সমস্যা সমাধানের জন্য, কিছু বিকাশকারী ব্লকগুলিতে +/- বোতামগুলি যোগ করে যা ম্যানুয়ালি ইনপুটগুলি যুক্ত বা অপসারণ করে। ওপেন রবার্টা নীচে থেকে ইনপুট যোগ করতে বা অপসারণ করতে এই ধরনের দুটি বোতাম ব্যবহার করে। অন্যান্য বিকাশকারীরা প্রতিটি সারিতে দুটি বোতাম যুক্ত করে যাতে স্ট্যাকের মাঝখানে থেকে সন্নিবেশ এবং মুছে ফেলার ব্যবস্থা করা যায়। অন্যরা প্রতিটি সারিতে দুটি আপ/ডাউন বোতাম যোগ করে যাতে স্ট্যাকের পুনর্বিন্যাস করা যায়।
এই কৌশলটি প্রতি ব্লকে মাত্র দুটি বোতাম থেকে শুরু করে সারিতে চারটি বোতাম পর্যন্ত বিকল্পের একটি বর্ণালী। এক প্রান্তে এমন বিপদ যে ব্যবহারকারীরা তাদের প্রয়োজনীয় ক্রিয়া সম্পাদন করতে সক্ষম হয় না, অন্য প্রান্তে UI বোতামে এতটাই পূর্ণ যে এটি স্টারশিপ এন্টারপ্রাইজের সেতুর মতো দেখায়।
ঘ) সবচেয়ে নমনীয় পদ্ধতি হল ব্লকে একটি মিউটেটর বুদবুদ যোগ করা। এটি একটি একক বোতাম হিসাবে উপস্থাপন করা হয় যা সেই ব্লকের জন্য একটি কনফিগারেশন ডায়ালগ খোলে। উপাদান যোগ করা যেতে পারে, মুছে ফেলা, বা ইচ্ছামত পুনর্বিন্যাস.
এই পদ্ধতির অসুবিধা হল যে এটি মিউটেটারগুলি নবীন ব্যবহারকারীদের জন্য স্বজ্ঞাত নয়। মিউটেটরদের পরিচয় করিয়ে দেওয়ার জন্য কিছু ধরনের নির্দেশের প্রয়োজন হয়। ছোট বাচ্চাদের লক্ষ্য করে ব্লক-ভিত্তিক অ্যাপ্লিকেশনগুলি মিউটেটর ব্যবহার করা উচিত নয়। যদিও একবার শিখেছি, তারা পাওয়ার ব্যবহারকারীদের জন্য অমূল্য।
প্রস্তাবনা: প্রতিটি কৌশলের সুবিধা এবং অসুবিধা রয়েছে, আপনার ব্যবহারকারীদের জন্য কী সঠিক তা বেছে নিন।