এটাই কি রাকুর ডিজাইনের উদ্দেশ্য?
এটা বলা ঠিক যে রাকু পুরোপুরি এই অঞ্চলে অপরিবর্তিত নয়। আপনার প্রশ্নটি রাকুর ডিজাইনের দুটি থিমগুলিকে স্পর্শ করে, যা উভয়ই একটু আলোচনার জন্য।
রাকুর প্রথম-শ্রেণীর এল-মান রয়েছে
রাকু প্রথম-শ্রেণীর জিনিস হিসাবে এল-ভ্যালুগুলির প্রচুর ব্যবহার করে। আমরা যখন লিখি:
has $.x is rw;
উত্পাদিত পদ্ধতিটি হ'ল:
method x() is rw { $!x }
is rwএখানে ইঙ্গিত করে যে পদ্ধতি একটি ফিরে আসছে L-মান - যে, এমন কিছু বিষয় যা নির্ধারিত করা যেতে পারে। এইভাবে আমরা যখন লিখি:
$obj.x = 42;
এটি সিনট্যাকটিক চিনি নয়: এটি সত্যিই একটি মেথড কল এবং তার পরে তার ফলাফলের জন্য অ্যাসাইনমেন্ট অপারেটর প্রয়োগ করা হচ্ছে। এটি কার্যকর হয়, কারণ পদ্ধতি কলটি Scalarবৈশিষ্ট্যের ধারককে ফেরত দেয় , যার পরে নির্ধারিত হতে পারে। এটি একটি তুচ্ছ সিনট্যাকটিক রূপান্তর নয়, এটি দেখার জন্য এটি দুটি ধাপে বিভক্ত করার জন্য বাইন্ডিং ব্যবহার করতে পারে। উদাহরণস্বরূপ, এটি:
my $target := $obj.x;
$target = 42;
অবজেক্ট বৈশিষ্ট্য বরাদ্দ করা হবে। এই একই প্রক্রিয়াটি তালিকা নিয়োগ সহ আরও অসংখ্য বৈশিষ্ট্যের পিছনে রয়েছে। উদাহরণস্বরূপ, এটি:
($x, $y) = "foo", "bar";
Listকনটেইনার $xএবং একটি কাজ করে $yএবং তারপরে এই ক্ষেত্রে অ্যাসাইনমেন্ট অপারেটরটি অ্যাসাইনমেন্টটি করার জন্য প্রতিটি পাশের জোড়ায় পুনরাবৃত্তি করে। এর অর্থ আমরা rwসেখানে অবজেক্ট অ্যাকসেসরগুলি ব্যবহার করতে পারি :
($obj.x, $obj.y) = "foo", "bar";
এবং এটি সব ঠিক প্রাকৃতিকভাবে কাজ করে। অ্যারে এবং হ্যাশগুলির টুকরাগুলিকে বরাদ্দ দেওয়ার পিছনেও এই প্রক্রিয়া।
Proxyএল-ভ্যালু কনটেইনার তৈরি করতে কেউ এটি ব্যবহার করতে পারে যেখানে এটি পড়ার এবং লেখার আচরণ আপনার নিয়ন্ত্রণে রয়েছে। এইভাবে, আপনি পার্শ্ব-ক্রিয়াগুলি এতে প্রবেশ করতে পারেন STORE। যাহোক...
রাকু "সেটটার" এর চেয়ে বেশি অর্থোত্তর পদ্ধতি উত্সাহিত করে
যখন আমরা ওও বর্ণনা করি, "এনক্যাপসুলেশন" এবং "ডেটা হিডিং" এর মতো শব্দগুলি প্রায়শই আসে। এখানে মূল ধারণাটি হ'ল বস্তুর অভ্যন্তরের রাষ্ট্রীয় মডেল - এটি তার আচরণগুলি (পদ্ধতিগুলি) বাস্তবায়নের জন্য প্রয়োজনীয় উপাত্তকে উপস্থাপন করার উপায়টি - বিকশিত হতে পারে, উদাহরণস্বরূপ নতুন প্রয়োজনীয়তাগুলি পরিচালনা করতে। বস্তু যত জটিল, ততই মুক্ত হয়।
যাইহোক, গেটার্স এবং সেটারগুলি এমন একটি পদ্ধতি যা রাষ্ট্রের সাথে অন্তর্নিহিত সংযোগ রয়েছে। আমরা যখন দাবি করতে পারি যে আমরা ডেটা লুকিয়ে রাখছি কারণ আমরা একটি পদ্ধতি বলছি, সরাসরি রাষ্ট্রের অ্যাক্সেস না করছি, আমার অভিজ্ঞতা হ'ল আমরা দ্রুত এমন জায়গায় পৌঁছে যাই যেখানে কোনও অপারেশন অর্জনের জন্য বাইরের কোড সেটার কলগুলির ক্রম তৈরি করে চলেছে - যা বৈশিষ্ট্যটির একটি রূপটি অ্যান্টি-প্যাটার্নকে enর্ষা করে। এবং যদি আমরা কাজ করছি যে , এটা প্রশংসনীয় নির্দিষ্ট আমরা অবজেক্ট যে একটি অপারেশন অর্জনে গেটার এবং সেটার অপারেশন একটি মিশ্রণ করে যুক্তি বাহিরে দিয়ে শেষ করব। সত্যই, এই ক্রিয়াকলাপগুলি এমন একটি নাম সহ পদ্ধতি হিসাবে উদ্ভাসিত হওয়া উচিত ছিল যা বর্ণনা করা হচ্ছে যা অর্জন করা হচ্ছে। এটি আরও গুরুত্বপূর্ণ হয়ে ওঠে যদি আমরা একযোগে সেটিংয়ে থাকি; একটি সুনির্দিষ্ট ডিজাইন করা অবজেক্ট প্রায়শই পদ্ধতি সীমানায় রক্ষা করা মোটামুটি সহজ।
এটি বলেছে যে এর অনেকগুলি ব্যবহার classসত্যই রেকর্ড / পণ্য ধরণের: এগুলি কেবলমাত্র একগুচ্ছ ডেটা আইটেমকে একসাথে গোষ্ঠীবদ্ধ করার জন্য বিদ্যমান। এটি কোনও দুর্ঘটনা নয় যে .সিগিল কেবল একটি অ্যাক্সেসর তৈরি করে না, এছাড়াও:
- ডিফল্ট অবজেক্ট ইনিশিয়ালাইজিক লজিক (যেটি একটি
class Point { has $.x; has $.y; }হিসাবে ইনস্ট্যান্ট করা যেতে পারে Point.new(x => 1, y => 2)) দ্বারা অ্যাট্রিবিউটটিকে সেট করাতে পছন্দ করে এবং .rakuডাম্পিং পদ্ধতিতে এটি রেন্ডার করে ।
- ডিফল্ট
.Captureঅবজেক্টে অ্যাট্রিবিউটটি বেছে নেয় , এর অর্থ আমরা এটি ডেস্ট্রাকচারিংয়ে (উদাহরণস্বরূপ sub translated(Point (:$x, :$y)) { ... }) ব্যবহার করতে পারি ।
আপনি যদি আরও প্রক্রিয়াগত বা কার্যকরী শৈলীতে লিখতে এবং classরেকর্ডের ধরণের সংজ্ঞা দেওয়ার জন্য একটি উপায় হিসাবে ব্যবহার করছিলেন তবে আপনি কী চাইবেন ?
রাকু ডিজাইনটি সেটারগুলিতে চতুর জিনিসগুলি করার জন্য অনুকূল নয়, কারণ এটি অপ্টিমাইজ করা একটি দরিদ্র বিষয় হিসাবে বিবেচিত হয়। এটি রেকর্ড টাইপের জন্য যা প্রয়োজন তা অতিক্রম করে; কিছু ভাষায় আমরা তর্ক করতে পারি যে আমরা কী বরাদ্দ করা হচ্ছে তার বৈধতা চাই, তবে রাকুতে আমরা এর জন্য subsetপ্রকারগুলিতে যেতে পারি । একই সময়ে, আমরা যদি সত্যিই ওও ডিজাইনটি করি, তবে আমরা রাষ্ট্রীয় মডেলকে আড়াল করে এমন অর্থপূর্ণ আচরণের একটি এপিআই চাই, যাঁরা গেট / সেটারদের ক্ষেত্রে চিন্তাভাবনা করার পরিবর্তে কলোকের ব্যর্থতার দিকে ঝুঁকে পড়ে tend ডেটা এবং আচরণ, যা যাইহোক OO করার মূল বিষয়।