ব্লকগুলি বন্ধনীকে বোঝায়। উদাহরণস্বরূপ, আপনি যখন নিম্নলিখিত ব্লকগুলি দেখেন, আপনি ধরে নেন এর অর্থ -(5 + 2)
নয় -5 + 2
কারণ 5
এবং 2
একটি ব্লকের অংশ এবং -
অন্য ব্লকের অংশ।
কিন্তু আপনি যদি প্রতিটি ব্লকের চারপাশে বন্ধনী রাখেন, এটি কোডটিকে অনেক কম পঠনযোগ্য করে তোলে। (((5) * (2)) + (3))
5 * 2 + 3
এর সাথে তুলনা করুন। এই উভয় অভিব্যক্তি একই জিনিসের মূল্যায়ন করে ( 13
) কিন্তু দ্বিতীয়টি পড়া অনেক সহজ।
ব্লকলির অপারেটর অগ্রাধিকার নিয়ম আপনাকে সর্বাধিক পাঠযোগ্যতার জন্য ন্যূনতম সংখ্যক বন্ধনী সহ কোড তৈরি করতে সহায়তা করে।
"সঠিক" আউটপুট তৈরি করুন
মানব-পাঠযোগ্য হওয়ার জন্য আপনার জেনারেট করা কোডের প্রয়োজন না হলে, বন্ধনী ছোট করার বিষয়ে চিন্তা করার দরকার নেই। প্রতিটি ব্লক মোড়ানো একটি সূক্ষ্ম পদ্ধতি, এবং এটি নিশ্চিত করে যে আপনার তৈরি করা কোড সর্বদা সঠিকভাবে মূল্যায়ন করা হয়।
সঠিকতা নিশ্চিত করতে, সর্বদা Order.ATOMIC
থেকে valueToCode
কলে পাস করুন এবং সর্বদা আপনার ব্লক-কোড জেনারেটর থেকে Order.NONE
ফেরত দিন।
সর্বোত্তম বন্ধনী তৈরি করুন
বন্ধনী শুধুমাত্র সন্নিবেশ করা প্রয়োজন যদি উত্পন্ন কোড তাদের ছাড়া ভুল হয়। এটি ঘটে যখন বাইরের ব্লকে একটি অপারেটরের অগ্রাধিকার ভিতরের ব্লকের একটি অপারেটরের অগ্রাধিকারের চেয়ে শক্তিশালী হয়।
উদাহরণস্বরূপ, নিম্নলিখিত ব্লকগুলিতে একটি ইউনারি নেগেশন অপারেটর এবং একটি সংযোজন অপারেটর রয়েছে। সংযোজন অপারেটরের তুলনায় unary negation এর একটি শক্তিশালী অগ্রাধিকার রয়েছে।
সুতরাং আপনি যদি বন্ধনী যোগ না করেন তবে আপনি -5 + 2
পাবেন এবং -
+
এর আগে মূল্যায়ন করা হবে, যা ব্লকের সাথে মেলে না।
আপনার বিভিন্ন অপারেটর কতটা শক্তিশালী তা বলে আপনি জেনারেটরকে কখন বন্ধনী সন্নিবেশ করতে হবে তা বলতে পারেন। যদি এটি দেখে যে বাইরের অপারেটরটি ভিতরের অপারেটরের চেয়ে শক্তিশালী, এটি ভিতরের অপারেটরকে রক্ষা করার জন্য বন্ধনী সন্নিবেশ করায়।
valueToCode
বাইরের অপারেটরের অগ্রাধিকার নেয় এবং রিটার্ন টিপল ভিতরের অপারেটরের অগ্রাধিকার নির্দিষ্ট করে।
এখানে দুটি অপারেটর অন্তর্ভুক্ত একটি ব্লকের জন্য একটি উদাহরণ রয়েছে:
import {javascriptGenerator, Order} from 'blockly/javascript';
javascriptGenerator.forBlock['negate_plus_two'] = function(block, generator) {
// valueToCode takes in the precedence of the outer operator.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
// The return tuple specifies the precedence of the inner operator.
return [code, Order.ADDITION];
}
valueToCode অগ্রাধিকার
যখন আপনি একটি অভ্যন্তরীণ ব্লকের কোড তৈরি করতে valueToCode
কল করেন, তখন আপনি এটিকে সবচেয়ে শক্তিশালী অপারেটরের অভ্যন্তরীণ ব্লকের কোডে কাজ করার অগ্রাধিকার দিয়ে যান। এটি অপারেটর যা থেকে অভ্যন্তরীণ ব্লকের কোড সুরক্ষিত করা প্রয়োজন।
উদাহরণস্বরূপ, নিম্নলিখিত ব্লকগুলিতে অনারী নেগেশান অপারেটর এবং সংযোজন অপারেটর উভয়ই ভিতরের ব্লকের কোডের উপর কাজ করছে। ইউনারি নেগেশানটি শক্তিশালী, তাই আপনার valueToCode
পাস করা উচিত অগ্রাধিকার।
// The - is the strongest operator acting on the inner code.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;
প্রত্যাবর্তন অগ্রাধিকার
আপনি যখন আপনার ব্লক-কোড জেনারেটর থেকে অগ্রাধিকার ফেরত দেন, তখন ব্লকের কোডের মধ্যে সবচেয়ে দুর্বল অপারেটরের অগ্রাধিকার ফেরত দিন। এই অপারেটর যে সুরক্ষা প্রয়োজন.
উদাহরণ স্বরূপ, নিম্নলিখিত ব্লকটিতে একটি ইউনারি নেগেশান অপারেটর এবং একটি সংযোজন অপারেটর উভয়ই রয়েছে। সংযোজনটি দুর্বল, তাই আপনাকে ব্লক-কোড জেনারেটর থেকে ফিরে আসা উচিত।
const code = `-${innerCode} + 2`;
// The + is the weakest operator in the block.
return [code, Order.ADDITION];
অর্ডার enum
প্রতিটি ভাষা জেনারেটর মডিউল একটি Order
enum সংজ্ঞায়িত করে যা সেই ভাষার জন্য সমস্ত অগ্রাধিকার অন্তর্ভুক্ত করে।
শক্তিশালী অগ্রাধিকারের কম ব্যাকিং মান থাকে, এবং দুর্বল অগ্রাধিকারের উচ্চতর ব্যাকিং মান থাকে। আপনি শক্তিশালী অগ্রাধিকারগুলিকে শক্তিতে "উচ্চতর স্থান" হিসাবে এবং দুর্বল অগ্রাধিকারগুলিকে "নিম্ন স্থান দেওয়া" হিসাবে ভাবতে পারেন - যেন তারা প্রতিযোগিতামূলক যোদ্ধা।
এখানে আপনি সমস্ত অন্তর্নির্মিত ভাষার জন্য Order
enums খুঁজে পেতে পারেন:
বিশেষ অগ্রাধিকার
জেনারেটরের Order
এনামগুলির বেশিরভাগ অগ্রাধিকার তাদের নিজ নিজ পাঠ্য-ভিত্তিক ভাষার দ্বারা সংজ্ঞায়িত অগ্রাধিকারের সাথে মেলে। কিন্তু দুটি বিশেষ অগ্রাধিকার আছে, Order.ATOMIC
এবং Order.NONE
।
Order.ATOMIC
হল সবচেয়ে শক্তিশালী অগ্রাধিকার। এটি ব্যবহার করা হয় যখন:
- আপনি নিশ্চিত করতে চান যে কোডটি সর্বদা বন্ধনীর আকারে থাকে , তাই আপনি এটিকে
valueToCode
এ পাস করেন। - আপনার ব্লকে কোনো অপারেটর অন্তর্ভুক্ত নয়, তাই আপনি এটি আপনার ব্লক-কোড জেনারেটর থেকে ফেরত দেন।
Order.NONE
হল সবচেয়ে দুর্বল অগ্রাধিকার। এটি ব্যবহার করা হয় যখন:
- আপনি নিশ্চিত করতে চান যে কোড সর্বদা বন্ধনী করা হয় , তাই আপনি এটি আপনার ব্লক-কোড জেনারেটর থেকে ফেরত দেন।
- একটি অভ্যন্তরীণ ব্লকের উপর কাজ করে এমন কোন অপারেটর নেই, তাই আপনি এটিকে
valueToCode
এ পাস করেন।