ভূমিকা
এই পৃষ্ঠাটি মূল ব্লকলিতে কলিং ফাংশন এবং বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য সর্বোত্তম অনুশীলনগুলি বর্ণনা করে৷ এই নীতিগুলি ব্লকলির জন্য প্লাগইন তৈরি করতে বা ব্লকলিকে একটি স্বতন্ত্র অ্যাপ্লিকেশনে একীভূত করার ক্ষেত্রে প্রযোজ্য।
সাবক্লাসিং এবং প্রসারিত
ব্লকলিতে কার্যকারিতা যোগ করার জন্য একাধিক দৃষ্টান্ত রয়েছে, যার মধ্যে রয়েছে:
- সাবক্লাস (যেমন একটি নতুন রেন্ডারার তৈরি করা)
- মিক্সিনস (যেমন একটি ব্লক এক্সটেনশন বা মিউটেটর যোগ করা)
- ব্লক সংজ্ঞা (যেমন পদ্ধতি ব্লক সংজ্ঞা)
এই নথির উদ্দেশ্যে, তিনটি ক্ষেত্রেই উপশ্রেণীর সমতুল্য।
ইনজেকশন সাবক্লাস
আমরা Blockly.inject
পদ্ধতির মাধ্যমে নির্দিষ্ট ক্লাস প্রতিস্থাপন সমর্থন করি। এই সাবক্লাসগুলিকে অবশ্যই বেস ক্লাস প্রসারিত করতে হবে, অথবা তাদের সংশ্লিষ্ট ইন্টারফেস বাস্তবায়ন করতে হবে।
আপনি ইনজেকশন পদ্ধতিতে আপনার সাবক্লাস পাস করতে পারেন।
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
অথবা আপনি Blockly.registry
ব্যবহার করে আপনার ক্লাস নিবন্ধন করতে পারেন এবং ক্লাস ইনজেক্ট করতে রেজিস্ট্রি নাম ব্যবহার করতে পারেন। আপনি যদি আপনার ইনজেকশন বিকল্পগুলিকে বিশুদ্ধ JSON হিসাবে সংরক্ষণ করেন তবে এটি কার্যকর।
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', SubClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}
নিম্নলিখিত ক্লাস প্রতিস্থাপন করা যেতে পারে:
রেজিস্ট্রেশন নাম | ইন্টারফেস/বেস ক্লাস |
---|---|
blockDragger | Blockly.IBlockDragger |
connectionChecker | Blockly.IConnectionChecker |
connectionPreviewer | Blockly.IConnectionPreviewer |
flyoutsVerticalToolbox | Blockly.IFlyout |
flyoutsHorizontalToolbox | Blockly.IFlyout |
metricsManager | Blockly.IMetricsManager |
renderer | Blockly.blockRendering.Renderer |
toolbox | Blockly.IToolbox |
ইন্টারফেস ব্যবহার সম্পর্কে আরও তথ্যের জন্য ডকুমেন্টেশনের ইন্টারফেস বিভাগটি দেখুন।
দৃশ্যমানতা
মূল লাইব্রেরিতে দৃশ্যমানতাকে public
, private
বা protected
হিসাবে চিহ্নিত করতে আমরা TypeScript অ্যাক্সেস মডিফায়ার ব্যবহার করি। কিছু বৈশিষ্ট্য তাদের TsDoc মন্তব্যে @internal
দিয়ে টীকা করা হতে পারে।
সমস্ত public
এবং protected
সম্পত্তি ব্লকলি ওয়েবসাইটের রেফারেন্স বিভাগে নথিভুক্ত করা হয়েছে। আপনি কোড পড়ে দৃশ্যমানতা পরীক্ষা করতে পারেন।
সর্বজনীন
public
চিহ্নিত যেকোনো কিছু আমাদের পাবলিক API এর অংশ। একটি মডিউলের যেকোন সম্পত্তি যাতে দৃশ্যমানতা পরিবর্তনকারী নেই তা সর্বজনীন বলে বিবেচিত হয়।
আমরা আমাদের পাবলিক API ঘন ঘন বা ভাল কারণ এবং সতর্কতা ছাড়া পরিবর্তন না করার চেষ্টা করি। ব্যতিক্রম: আমরা একটি রিলিজে একটি নতুন API সর্বজনীন করতে পারি এবং প্রাথমিক প্রতিক্রিয়ার প্রতিক্রিয়া হিসাবে পরবর্তী রিলিজে এটি সংশোধন করতে পারি। এর পরে আপনি একটি পাবলিক ফাংশন বা সম্পত্তি স্থিতিশীল বিবেচনা করতে পারেন।
পাবলিক ফাংশনগুলি যে কোনও জায়গা থেকে কল করা যেতে পারে এবং সাবক্লাসগুলিতে ওভাররাইড করা যেতে পারে যতক্ষণ না স্বাক্ষর পরিবর্তন না হয়।
সুরক্ষিত
সুরক্ষিত ফাংশন এবং বৈশিষ্ট্য শুধুমাত্র সংজ্ঞায়িত শ্রেণী বা একটি সাবক্লাস দ্বারা অ্যাক্সেস করা যেতে পারে।
টাইপ স্বাক্ষর পরিবর্তন না করেই সাবক্লাসগুলিকে সুরক্ষিত ফাংশন এবং বৈশিষ্ট্য ওভাররাইড করার অনুমতি দেওয়া হয়।
উদাহরণস্বরূপ, একটি কাস্টম রেন্ডারার যা বেস রেন্ডারার ক্লাসকে প্রসারিত করে তার সুরক্ষিত বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে।
প্রতিটি ক্ষেত্রে আপনাকে নিশ্চিত করা উচিত যে আপনি বুঝতে পেরেছেন যে কোডের বাকি অংশে ফাংশন বা সম্পত্তি কীভাবে ব্যবহার করা হয়।
ব্যক্তিগত
এগুলি শুধুমাত্র সংজ্ঞা হিসাবে একই ফাইলে কোড দ্বারা অ্যাক্সেস করা যেতে পারে। এই বৈশিষ্ট্যগুলি সরাসরি অ্যাক্সেস করার ফলে অনির্ধারিত আচরণ হতে পারে।
সাবক্লাস ব্যক্তিগত ফাংশন এবং বৈশিষ্ট্য ওভাররাইড করার অনুমতি দেওয়া হয় না.
ব্যক্তিগত সম্পত্তি সতর্কতা ছাড়াই পরিবর্তন সাপেক্ষে, কারণ সেগুলি Blockly-এর সর্বজনীন API-এর অংশ হিসাবে বিবেচিত হয় না৷
ব্লকলির কিছু ফাংশনে দৃশ্যমানতা টীকা নেই কারণ সেগুলি তাদের মডিউল থেকে রপ্তানি করা হয় না। এই ফাংশনগুলি মূলত স্থানীয় ভেরিয়েবল এবং তাদের সংজ্ঞায়িত মডিউলের বাইরে ব্যবহার করা যায় না। তাদের ব্যক্তিগত সম্পত্তির সমতুল্য বিবেচনা করা উচিত।
অভ্যন্তরীণ
অভ্যন্তরীণ ফাংশন এবং বৈশিষ্ট্যগুলি মূল লাইব্রেরির মধ্যে ব্যবহার করার উদ্দেশ্যে, কিন্তু বাহ্যিকভাবে নয়। এগুলিকে TsDoc @internal
টীকা দিয়ে মনোনীত করা হয়েছে৷
অভ্যন্তরীণ বৈশিষ্ট্যগুলি সতর্কতা ছাড়াই পরিবর্তন সাপেক্ষে, কারণ সেগুলি Blockly-এর সর্বজনীন API-এর অংশ হিসাবে বিবেচিত হয় না৷
অভ্যন্তরীণ বৈশিষ্ট্যগুলি কোরের মধ্যে যে কোনও জায়গা থেকে অ্যাক্সেস করা যেতে পারে, এবং যতক্ষণ পর্যন্ত স্বাক্ষর পরিবর্তন না হয় ততক্ষণ পর্যন্ত মূল উপশ্রেণীতে ওভাররাইড করা যেতে পারে। সেগুলি অবশ্যই মূল লাইব্রেরির বাইরে থেকে অ্যাক্সেস করা উচিত নয়৷
অবমূল্যায়ন
@deprecated
চিহ্নিত কিছু ব্যবহার করা উচিত নয়। বেশিরভাগ অবচয়নে পছন্দের কোডের দিকনির্দেশ অন্তর্ভুক্ত থাকে, হয় কনসোল সতর্কতা বা TSDoc-এ।
যেখানে সম্ভব, অবহেলিত ফাংশনগুলি একটি সতর্কতা লগ করবে যাতে মুছে ফেলার উদ্দেশ্য এবং কল করার জন্য একটি প্রতিস্থাপন ফাংশনের জন্য একটি সুপারিশ অন্তর্ভুক্ত থাকে।
FAQs
যদি আমি যে ফাংশনটি ব্যবহার করতে চাই সেটি সর্বজনীন না হয়?
মূল ব্লকলিতে একটি বৈশিষ্ট্য অনুরোধ ফাইল করুন। আপনার ব্যবহারের ক্ষেত্রে একটি বিবরণ এবং আপনি আমাদেরকে কী প্রকাশ করতে চান তার একটি বিবৃতি অন্তর্ভুক্ত করুন।
আমরা এটিকে সর্বজনীন করতে হবে কিনা বা আপনার কাছে একই তথ্য পাওয়ার অন্য উপায় আছে কিনা তা নিয়ে আলোচনা করার অনুরোধ করার জন্য আমরা বৈশিষ্ট্যটি ব্যবহার করব।
আমরা যদি এটিকে সর্বজনীন করার সিদ্ধান্ত নিই, হয় আপনি বা Blockly টিম উপযুক্ত পরিবর্তন করবেন এবং এটি পরবর্তী Blockly রিলিজে লাইভ হবে।
আপনি যদি একটি প্লাগইনে অ-পাবলিক সদস্য ব্যবহার করতে চান, তাহলে আপনার প্লাগইনটিকে বিটা হিসাবে চিহ্নিত করার কথা বিবেচনা করুন এবং আপনার README
এ তথ্য অন্তর্ভুক্ত করুন৷
মাঙ্কিপ্যাচিং সম্পর্কে কি?
বানরপ্যাচিং সম্পর্কে পড়ুন।
মাঙ্কিপ্যাচিং অনিরাপদ, কারণ ব্লকলি API-এর অ-পাবলিক টুকরা ব্যবহার করার কারণে প্যাচগুলি নোটিশ ছাড়াই কাজ করা বন্ধ করতে পারে। একটি প্লাগইনে প্যাচ করা বিশেষত বিপজ্জনক, কারণ আপনার কোড একই কোড মাঙ্কিপ্যাচ করে এমন অন্য কোনো প্লাগইনের সাথে খারাপভাবে ইন্টারঅ্যাক্ট করতে পারে। এই কারণে আমরা দৃঢ়ভাবে অ্যাপ্লিকেশন এবং তৃতীয় পক্ষের প্লাগইনগুলিতে মাঙ্কিপ্যাচিংয়ের বিরুদ্ধে সুপারিশ করি এবং প্রথম পক্ষের প্লাগইনগুলিতে এটি গ্রহণ করব না।
আমি কি পাবলিক ফাংশন ওভাররাইড করতে পারি?
সাবক্লাসিং করার সময়: হ্যাঁ। অন্যথায়: না, এটা বানরপ্যাচিং।
আমি কি সুরক্ষিত ফাংশন ওভাররাইড করতে পারি?
সাবক্লাসিং করার সময়: হ্যাঁ। অন্যথায়: না, এটা বানরপ্যাচিং।
আমি কি অভ্যন্তরীণ বা ব্যক্তিগত ফাংশন ওভাররাইড করতে পারি?
না, এটা মাঙ্কিপ্যাচিং।
কখন আমি সরাসরি সম্পত্তি অ্যাক্সেস করতে পারি? আমি কখন গেটার বা সেটার ব্যবহার করব?
যদি আমরা একটি গেটার বা সেটার প্রকাশ করি, দয়া করে সরাসরি সম্পত্তি অ্যাক্সেস করার পরিবর্তে এটি ব্যবহার করুন। সম্পত্তি সর্বজনীন না হলে, অবশ্যই গেটার এবং সেটার্স ব্যবহার করুন।
যদি একটি সম্পত্তি একটি টীকা না থাকে?
ডিফল্টরূপে এটি সর্বজনীন, কিন্তু আমরা যদি আপনার জন্য একটি গেটার/সেটার জুটি রাখতে চাই তাহলে দয়া করে আমাদের একটি লাইন দিন৷
যদি একটি ফাংশন একটি টীকা না থাকে?
এটি ডিফল্টরূপে সর্বজনীন।
আমি এখনও নিশ্চিত না হলে কি হবে?
ফোরামে একটি প্রশ্ন জিজ্ঞাসা করুন এবং আমরা সাধারণত একটি ব্যবসায়িক দিনের মধ্যে আপনার কাছে ফিরে আসব।