রুবিতে স্ট্রাকট কি?
একটি স্ট্রাকট একটি অন্তর্নির্মিত রুবি ক্লাস, এটি নতুন ক্লাস তৈরি করতে ব্যবহৃত হয় যা মান বস্তু তৈরি করে। একটি মান বস্তু একসাথে সম্পর্কিত বৈশিষ্ট্য সংরক্ষণ করতে ব্যবহৃত হয়.
এখানে একটি উদাহরণ আছে :
একটি Point
দুটি স্থানাঙ্ক সহ (x
&y
)।
আপনি এই ডেটাকে বিভিন্ন উপায়ে উপস্থাপন করতে পারেন।
লাইক :
- একটি অ্যারে
[10, 20]
- একটি হ্যাশ
{ x: 10, y: 10 }
- একটি বস্তু
Point.new(10, 20)
আপনার যদি একাধিক Point
থাকে , অবজেক্ট অ্যাপ্রোচ ব্যবহার করা প্রায়ই একটি ভালো অভ্যাস।
কিন্তু…
আপনি শুধুমাত্র এই দুটি মান একসাথে সংরক্ষণ করার জন্য একটি সম্পূর্ণ ক্লাস তৈরি করতে চান না!
একটি Struct
ব্যবহার করা এই সমস্যার সমাধান করে।
বিষয়বস্তু
- 1 কিভাবে রুবি
- -এ স্ট্রাকস তৈরি করবেন
- 1.1 বিকল্প উপায়
- 1.2 বড় সুবিধা
- 2 কিভাবে রুবি স্ট্রাকট ব্যবহার করবেন
- 3 সতর্কবাণী:কাঠামোগুলি জটিল হতে পারে
- 3.1 আরেকটি অদ্ভুত জিনিস
- রুবি 2.5-এ 4টি নাম দেওয়া পরামিতি
- 5 কিভাবে OpenStruct ব্যবহার করবেন
- 6 স্ট্রাকট বনাম ওপেনস্ট্রাক্ট
- 7 ভিডিও টিউটোরিয়াল দেখুন
- 8 উপসংহার
- 8.1 সম্পর্কিত
এটা করা যাক!
রুবিতে কীভাবে কাঠামো তৈরি করবেন
আপনি একটি Struct
তৈরি করতে পারেন new
কল করে এবং প্রতীকগুলির একটি তালিকায় পাস করা যা এই শ্রেণীর ইনস্ট্যান্স ভেরিয়েবল হয়ে উঠবে।
তাদের পাঠ ও লেখার জন্য ডিফল্টরূপে সংজ্ঞায়িত অ্যাক্সেসর পদ্ধতি থাকবে।
এখানে একটি উদাহরণ আছে :
Person = Struct.new(:name, :age, :gender)
এখন আপনি এইরকম একটি বস্তু তৈরি করতে পারেন :
john = Person.new "john", 30, "M" david = Person.new "david", 25, "M"
বিকল্প পথ
আপনি বন্য মধ্যে structs তৈরি এই অন্য উপায় খুঁজে পেতে পারেন.
এটা এরকম দেখাচ্ছে :
class Person < Struct.new(:name, :age, :gender) end
আমি এটি সুপারিশ করি না৷
৷কিন্তু আপনি যদি এখন সেখানে এটি খুঁজে পান তবে আপনি জানেন এটি কী করে।
বড় সুবিধা
স্ট্রাকট সম্পর্কে একটি ভাল জিনিস যদি আপনি তাদের বৈশিষ্ট্যগুলির উপর ভিত্তি করে সরাসরি তাদের তুলনা করতে পারেন।
উদাহরণ :
john == john # true
যদি এটি একটি নিয়মিত রুবি অবজেক্ট হয় তবে আপনাকে ==
সংজ্ঞায়িত করতে হবে নিজেই পদ্ধতি।
এটিকে আমরা "মান অবজেক্ট" বলি।
রুবি স্ট্রাকটগুলি কীভাবে ব্যবহার করবেন
একটি অ্যারে, বা একটি হ্যাশের উপর একটি স্ট্রাকট ব্যবহার করার একটি প্রধান সুবিধা হল আপনি পদ্ধতি ব্যবহার করে স্ট্রাকট সদস্যদের অ্যাক্সেস করতে পারবেন৷
উদাহরণস্বরূপ :
puts john.age # 30 puts david.gender # "M"
এটি সহায়ক কারণ আপনার কাছে বস্তুর একটি অ্যারে থাকলে, আপনি max
এর মত পদ্ধতি ব্যবহার করতে পারেন , select
, sum
, ইত্যাদি।
উদাহরণ :
[john, david].max_by(&:age)
চমৎকার!
সতর্কতা:কাঠামো জটিল হতে পারে
স্ট্রাকট-জেনারেটেড ক্লাসের সাথে আরেকটি সতর্কতা হল...
তারা কন্সট্রাক্টরের জন্য আর্গুমেন্টের সঠিক সংখ্যক! প্রয়োগ করবে না
আমাকে ব্যাখ্যা করতে দিন।
একটি সঠিক ক্লাসের সাথে আপনি এই ত্রুটিটি দেখতে পাবেন:
ArgumentError: wrong number of arguments (0 for 3)
কিন্তু আপনি যদি একটি Struct
ব্যবহার করেন অনুপস্থিত আর্গুমেন্ট শূন্য হবে:
Person.new("peter") # struct Person name="peter", age=nil, gender=nil
Struct
এর সাথে কাজ করার সময় এটি মনে রাখবেন বস্তু!
আরেকটি অদ্ভুত জিনিস
এটি একবার দেখুন...
Struct.new(:a).ancestors [#<Class:0x29b1040>, Struct, Enumerable, Object, Kernel, BasicObject]
এই #<Class:0x29b1040>
স্ট্রাকটে যোগ করা একটি বেনামী ক্লাস, এছাড়াও গণনাযোগ্য মডিউলটি লক্ষ্য করুন, যা আপনাকে প্রতিটি এবং মানচিত্রের মতো পদ্ধতিগুলিকে কল করার অনুমতি দেয়৷
রুবি 2.5-এ নাম দেওয়া প্যারামিটারগুলি
ধরা যাক যে আপনি একটি ফাইল থেকে লাইন পড়ছেন এবং প্রতিটি লাইন একটি আইটেম প্রতিনিধিত্ব করে।
উদাহরণ :
200 /login 18:00 404 /bacon 18:03 200 /books 18:04
আপনি যদি একটি কাস্টম ক্লাস তৈরি করেন তবে আপনি এই ডেটার সাথে আরও সহজে কাজ করেন৷
এরকম :
LogEntry = Struct.new(:status, :url, :time) LogEntry.new(200, '/books', '18:04')
কিন্তু প্রতিটি আর্গুমেন্ট কি প্রতিনিধিত্ব করে তা অতিরিক্ত পরিষ্কার করার জন্য আপনি কীওয়ার্ড আর্গুমেন্ট ব্যবহার করতে চাইতে পারেন।
সুখবর!
Ruby 2.5 Struct
-এ কীওয়ার্ড আর্গুমেন্টের জন্য সমর্থন যোগ করেছে বস্তু।
এটি কীভাবে ব্যবহার করবেন তা এখানে রয়েছে :
LogEntry = Struct.new(:status, :url, :time, keyword_init: true) LogEntry.new(status: 200, url: '/books', time: '18:04')
এখন আপনি আপনার ফাইল পার্স করতে পারেন এবং এটিকে LogEntry
-এ রূপান্তর করতে পারেন বস্তু!
কিভাবে OpenStruct ব্যবহার করবেন
আপনার যদি শুধুমাত্র একটি এক-অফ বস্তুর প্রয়োজন হয়, তাহলে আপনার OpenStruct
ব্যবহার করার কথা বিবেচনা করা উচিত পরিবর্তে।
কোড উদাহরণ :
require 'ostruct' cat = OpenStruct.new(color: 'black') puts cat.class puts cat.color
লক্ষ্য করুন কিভাবে আপনাকে ostruct
প্রয়োজন হবে এই ক্লাসে অ্যাক্সেস পেতে।
সতর্কতা:ওপেনস্ট্রাক্টটি ধীরগতির এবং এই রেডডিট মন্তব্যের স্কনিমস অনুসারে আপনার প্রোডাকশন অ্যাপে এটি ব্যবহার করা উচিত নয়। এছাড়াও আমি এই ব্লগ পোস্টটি খুঁজে পেয়েছি যাতে এটি সমর্থন করে এমন কিছু বেঞ্চমার্ক রয়েছে৷
৷
স্ট্রাকট বনাম ওপেনস্ট্রাক্ট
Struct
এর মধ্যে পার্থক্য &OpenStruct
:
- স্ট্রাকট একটি নতুন ক্লাস তৈরি করে পূর্বনির্ধারিত বৈশিষ্ট্য সহ, সমতা পদ্ধতি (==) এবং গণনাযোগ্য
- OpenStruct একটি নতুন বস্তু তৈরি করে প্রদত্ত বৈশিষ্ট্যের সাথে
একটি OpenStruct
একটি অভিনব হ্যাশ অবজেক্ট, যখন একটি Struct
একটি টেমপ্লেট থেকে একটি নতুন ক্লাস তৈরি করার মতো৷
ভিডিও টিউটোরিয়াল দেখুন
উপসংহার
আপনি রুবি স্ট্রাকট এবং ওপেনস্ট্রাক্ট সম্পর্কে শিখেছেন! যতক্ষণ না আপনি এই ক্লাসগুলির প্রতিটির বিশেষ বৈশিষ্ট্য সম্পর্কে সচেতন থাকবেন ততক্ষণ আপনি ভাল থাকবেন৷
এখন আপনার অনুশীলন করার পালা 🙂