ট্র্যাক
/
Elm
Elm
/
সিলেবাস
/
ওপেক টাইপস
ওপ

ওপেক টাইপস মধ্যে Elm

2টি অনুশীলনী

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

ভূমিকা

অপেক টাইপ হলো Elm-এর একটি এনক্যাপসুলেশন কৌশল। কেউ কেউ এটাকে ইনফরমেশন হাইডিং বা ইমপ্লিমেন্টেশনের বিস্তারিত লুকানোও বলেন। ভ্যালিডেশন কার্যকর করতেও এগুলো কমনভাবে ব্যবহৃত হয়, Parse, dont validate প্যাটার্ন ব্যবহার করে। উদাহরণস্বরূপ, আপনার একটি EmailAddress অপেক টাইপ থাকতে পারে, যেটিতে কেবল বৈধ ইমেইল থাকতে পারে (একটি String-এর বিপরীতে, যেটিতে যা খুশি থাকতে পারে)।

একটি অপেক টাইপ তৈরি করা

Custom types-এর এক বা একাধিক ভ্যারিয়েন্ট থাকে, আর কম্পাইলার স্বয়ংক্রিয়ভাবে প্রতিটি ভ্যারিয়েন্ট তৈরির একটি ফাংশন বানায়, ভ্যারিয়েন্ট-এর নাম ব্যবহার করে। কাস্টম টাইপ তৈরি করার এটিই একমাত্র উপায়। এই ভ্যারিয়েন্টগুলোর জন্যও কম্পাইলার ডিস্ট্রাকচারিংয়ের সুযোগ দেয়।

type Maybe a
    = Nothing --> Variant implies a 'Nothing' function, with type 'Maybe a', and destructuring of 'Nothing'
    | Just a  --> Variant implies a 'Just' function, with type 'a -> Maybe a', and destructuring of 'Just _'

ডিফল্টভাবে এই সবকিছু ফাইল / মডিউলের অভ্যন্তরীণ, আর কী এক্সপোর্ট করবেন তা বেছে নিতে আমরা exposing কিওয়ার্ড ব্যবহার করি। Maybe মডিউলটি Maybe টাইপ এক্সপোর্ট করে (যাতে অন্য মডিউলগুলো বিদ্যমান Maybe মান ব্যবহার করতে পারে), আর Nothing ও Just ভ্যারিয়েন্টও এক্সপোর্ট করে (যাতে অন্য মডিউলগুলো Maybe মান তৈরি ও ডিস্ট্রাকচার করতে পারে)। এটি করতে এটি নিচের সিনট্যাক্স ব্যবহার করে। Maybe(..) অংশটি Elm-কে সব ভ্যারিয়েন্ট এক্সপোর্ট করতে বলে, কাস্টম টাইপ ডেফিনিশনসহ।

module Maybe exposing
  ( Maybe(..)
  -- ...
  )

একটি অপেক টাইপ তৈরি করতে, আপনি শুধু ভ্যারিয়েন্টগুলো এক্সপোর্ট না করার সিদ্ধান্ত নেন। Maybe টাইপের ক্ষেত্রে এটি করতে, আপনি নিচের সিনট্যাক্স ব্যবহার করবেন:

module Maybe exposing
  ( Maybe
  -- ...
  )

এভাবে করলে, প্রায় সবসময়ই কাস্টম ফাংশন এক্সপোর্ট করে ভ্যারিয়েন্ট তৈরি ও পাওয়ার আরেকটি উপায় দিতে হয়। এই কাস্টম ফাংশনগুলো ভ্যারিয়েন্ট তৈরি ও পাওয়ার সময় কিছু লজিক প্রয়োগ করার সুযোগ দেয়। এটি মডিউলের অভ্যন্তরীণ ইমপ্লিমেন্টেশনের বিস্তারিত লুকিয়ে রাখে, আর বোঝায় যে এক্সপোর্ট করা ফাংশনগুলো একই থাকলে আপনি ইমপ্লিমেন্টেশনের বিস্তারিত যত খুশি বদলাতে পারেন। এটি টাইপটি তৈরি ও ব্যবহারের সময় ইনভ্যারিয়েন্ট রক্ষা করার সুযোগও দেয়।

Parse, don't validate

অপেক টাইপের সম্ভবত সবচেয়ে কমন ব্যবহার হলো Parse, dont validate প্যাটার্ন ব্যবহার করে ভ্যালিডেশন কার্যকর করা। এই প্যাটার্নে, আপনি এমন একটি ফাংশন এক্সপোর্ট করেন যা আপনার চেয়ে কম স্ট্রাকচার / টাইপ সেফটিসম্পন্ন একটি ইনপুট নেয়, যেমন একটি String, আর তারপর এটিকে আরও স্ট্রাকচারযুক্ত একটি টাইপে পার্স করে, যেমন EmailAddress, হয় টাইপটি রিটার্ন করে, নয়তো একটি এরর রিটার্ন করে (সাধারণত Maybe বা Result)।

উদাহরণস্বরূপ, নিচের কোডে বাইরের মডিউলগুলোর জন্য parseEmailAddress ফাংশন ব্যবহার করে EmailAddress টাইপ তৈরি করা ছাড়া আর কোনো উপায় নেই, তাই আপনি যখন EmailAddress টাইপ নিয়ে কাজ করেন, তখন নিশ্চিত থাকতে পারেন যে এটি বৈধ।

module EmailAddress exposing ( EmailAddress, parseEmailAddress, getEmailAddress )

-- The `EmailAddress` custom type has one variant, also called `EmailAddress`
-- When a custom type has one variant, it is idiomatic to use the same name for both.
type EmailAddress = 
  EmailAddress String

-- create an EmailAddress variant
parseEmailAddress: String -> Maybe EmailAddress
parseEmailAddress candidateEmailAddress =   
  if isValidEmailAddress candidateEmailAddress then
    Just (EmailAddress candidateEmailAddress)
  else
    Nothing

-- get an EmailAddress variant
getEmailAddress: EmailAddress -> String
getEmailAddress ( EmailAddress  emailAdress ) =
  emailAdress

isValidEmailAddress: String -> bool
-- ... 
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

ওপেক টাইপস শিখুন

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

ওপেক টাইপস অনুশীলন করতে আরও ১টি অনুশীলনী আনলক করুন