যদি বিবৃতি রুবি ১.৯-তে সুযোগ না দেয় , রুবি ১.৮ থেকে এই পরিবর্তনের পিছনে যুক্তি কী?
যদি বিবৃতি রুবি ১.৯-তে সুযোগ না দেয় , রুবি ১.৮ থেকে এই পরিবর্তনের পিছনে যুক্তি কী?
উত্তর:
রুবি ১.৯ এ কেন করা হয়েছে তার দুটি কারণ নিম্নলিখিত স্লাইডগুলিতে রয়েছে, যদিও এটি উপস্থাপকের ডায়ালগ ছাড়া সুস্পষ্ট নাও হতে পারে। দুটি বিষয় যা স্কোপ if
স্টেটমেন্টগুলি আপনাকে করতে দেয় তা হ'ল যদি আপনার উত্স কোডের এমন জিনিসগুলি সংজ্ঞায়িত করা হয় যা যদি বিবৃতিটির বাইরে প্রবেশ করা যায়।
প্রথম উদাহরণ: পদ্ধতিগুলি প্রতিস্থাপন করুন
class Employee
if String.method_defined?(:encode)
def name
...
end
else
def name
...
end
end
end
এই উদাহরণে, পদ্ধতির জন্য দুটি পৃথক সংজ্ঞা রয়েছেname
। যে ব্যবহার করা হবে String.encode
পদ্ধতি বিদ্যমান, এবং এক (নিকৃষ্ট বাস্তবায়ন) যে যদি সঙ্কেতাক্ষরে লিখা পদ্ধতি বিদ্যমান নয় ব্যবহার করা হবে। মূলত, লাইব্রেরিগুলি সমর্থন করে তবে এটি আপনাকে সঠিকভাবে এনকোডড স্ট্রিং ব্যবহার করতে দেয়।
দ্বিতীয় উদাহরণ: বাস্তবায়ন প্রতিস্থাপন
if String.method_defined?(:encode)
module Builder
...
end
else
class String
...
end
end
এই উদাহরণে, আমরা কোনও লাইব্রেরির বৈশিষ্ট্য বিদ্যমান কিনা তার উপর নির্ভর করে সম্পূর্ণ ভিন্ন শ্রেণি / মডিউল সরবরাহ করছি। এটি আপনাকে সম্পূর্ণ ভিন্ন অ্যালগরিদম করতে দেয় যা একটি নতুন লাইব্রেরি বৈশিষ্ট্য ব্যবহার করে এখনও কম দক্ষ বা সম্পূর্ণ অ্যালগরিদমের কাছে ফিরে আসে যা উপস্থিত না থাকলে পর্যাপ্ত।
কেন সব গুরুত্বপূর্ণ
সুতরাং এটি কি আপনাকে কিনতে? যদি if
বিবৃতিটি একটি নতুন সুযোগ প্রবর্তন করে তবে নতুন পদ্ধতি বা শ্রেণিটি কেবল উপস্থিত থাকবে এবং if
বিবৃতিটির সীমানায় ব্যবহার করা হবে । ভবিষ্যতের ১.৯ থেকে দূরে সরে যাওয়ার কারণে এই সীমাবদ্ধতা এমন একটি লাইব্রেরি সমর্থন করা খুব কঠিন করে তোলে যার রুবি ২.০-র পরিবর্তনের প্রয়োজন হবে।
আপনি যে লিঙ্কটির সাথে লিঙ্ক করেছেন উপস্থাপনায় প্রদত্ত দুটি উদাহরণের সাথে যুক্তিটি হ'ল রুবির একাধিক সংস্করণ সমর্থন করার সময় আপনার লাইব্রেরিগুলির জন্য একটি কোডবেস বজায় রাখা। আমি বিশ্বাস করি এটি রুবি 1.8 এবং রুবির 1.9 এর মধ্যে রূপান্তরের বেদনা থেকেই জন্মগ্রহণ করেছিল। যেহেতু রুবি টিম অবিচ্ছিন্নভাবে ২.০ এর দিকে এগিয়ে চলেছে, ততক্ষণ আপনি যখন আপনার সঙ্গতিহীন পরিবর্তনগুলি করতে পারেন তখন আপনার ব্যবহারকারীদের সমর্থন করতে সক্ষম হবেন। আমি বিশ্বাস করি যে ১.৯.১.২ থেকে ১.৯.২ এর মধ্যে কিছু ছিল। ভবিষ্যতে আরও কিছু থাকবে।
আমি কোন বিশেষজ্ঞ নই, কিন্তু আপনি রুবি প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী কটাক্ষপাত করা যদি: http://arc.apotheon.org/ruby/faq/rubyfaq-2.php
বিভাগ 2.3 "কখন স্থানীয় ভেরিয়েবল অ্যাক্সেসযোগ্য হয়?" বর্তমান আচরণ দেখায়
স্কোপিংয়ের সমস্যাটি পেতে, আপনার বর্তমানে করা কিছুটা "হ্যাকি" জিনিসগুলির মধ্যে একটি:
কোনও স্থানীয় ভেরিয়েবল অ্যাক্সেস করার আগে আপনাকে অ্যাসাইনমেন্ট স্টেটমেন্টটি স্থানীয় ভেরিয়েবলের ব্যবহারের দ্বারা বিরক্ত না করার জন্য একটি অ্যালাইন করা উচিত statement
আমি বিশ্বাস করি যে 1.9 এটি করার প্রয়োজনীয়তা সরিয়ে ফেলবে এবং নতুন আচরণের জন্য এটি ড্রাইভারদের মধ্যে অন্যতম হতে পারে।