স্

স্ট্রাক্ট মধ্যে Elixir

21টি অনুশীলনী

স্ট্রাক্ট সম্পর্কে

স্ট্রাক্ট হলো নির্দিষ্ট কী (key)-এর সেটবিশিষ্ট বিশেষ ম্যাপ।

  • স্ট্রাক্ট কম্পাইল-টাইম চেক ও ডিফল্ট মান দেয়।
  • কোনো স্ট্রাক্টের নাম হয় যে মডিউলে এটি ডিফাইন করা হয়, তার নাম অনুসারে।
  • স্ট্রাক্ট ডিফাইন করতে defstruct কনস্ট্রাক্টটি ব্যবহার করুন।
    • এই কনস্ট্রাক্টটি সাধারণত মডিউল ডেফিনিশনের ঠিক পরপরই থাকে।
  • defstruct হয় অ্যাটম-এর একটি লিস্ট (nil ডিফল্ট মানের জন্য) নেয়, নয়তো কিওয়ার্ড লিস্ট (নির্দিষ্ট ডিফল্ট মানের জন্য) নেয়।
    • ডিফল্ট মান নেই এমন ফিল্ডগুলো ডিফল্ট মানযুক্ত ফিল্ডের আগে থাকতে হবে।
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

ফিল্ড অ্যাক্সেস করা ও আপডেট করা

  • ম্যাপ-এর সাথে কাজ করা বেশিরভাগ ফাংশন স্ট্রাক্টের সাথেও কাজ করে।

    • Access Behaviour হলো এর ব্যতিক্রম, এবং এটি স্ট্রাক্টের জন্য ইমপ্লিমেন্ট করা হয়নি।
  • স্ট্রাক্টের ফিল্ড অ্যাক্সেস করতে static access operator . ব্যবহার করা সুপারিশ করা হয়।

  • ফিল্ডের মান পাওয়া/আনা:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • ফিল্ডের মান আপডেট করা:

    plane = %Plane{}
    %{plane | wings: 4}
    # => %Plane{engine: nil, wings: 4}
    

ফিল্ডের মান ইনিশিয়ালাইজ করা বাধ্যতামূলক করা

  • @enforce_keys মডিউল অ্যাট্রিবিউট একটি রান-টাইম চেক তৈরি করে, যাতে স্ট্রাক্ট তৈরি করার সময় নির্দিষ্ট ফিল্ডগুলো non-nil মান দিয়ে ইনিশিয়ালাইজ করতেই হয়।
  • @enforce_keys-এর পরে থাকে ফিল্ডের কী (key)-গুলোর একটি লিস্ট (যেগুলো অ্যাটম)।
  • কোনো বাধ্যতামূলক কী (key) ইনিশিয়ালাইজ করা না হলে একটি এরর উত্থাপিত হয়।
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

স্ট্রাক্ট শিখুন

অনুশীলন লক করা আছে

স্ট্রাক্ট অনুশীলন করতে আরও 9টি অনুশীলনী আনলক করুন