Input Validation এবং Error Handling এলেম (Elm) অ্যাপ্লিকেশনে ডেটার সঠিকতা নিশ্চিত করার জন্য গুরুত্বপূর্ণ। Input Validation হল ইউজারের ইনপুটের সঠিকতা যাচাই করা এবং Error Handling হল সিস্টেমের ত্রুটিগুলি পরিচালনা এবং তাদের সম্পর্কে ইউজারকে তথ্য প্রদান করা। Elm এর টাইপ সিস্টেম এবং ফাংশনাল প্যাটার্নগুলির মাধ্যমে এই দুটি বিষয় সুনির্দিষ্টভাবে পরিচালনা করা সম্ভব। এখানে Input Validation এবং Error Handling এর কিছু কৌশল এবং Elm-এ এর প্রয়োগ আলোচনা করা হলো।
১. Input Validation in Elm (ইনপুট ভ্যালিডেশন)
Input Validation হল ইউজারের ইনপুট যাচাই করার একটি প্রক্রিয়া, যাতে ইনপুটটি নির্দিষ্ট নিয়ম বা শর্ত পূরণ করে। Elm এর ফাংশনাল এবং টাইপ সিস্টেমের মাধ্যমে ইনপুট ভ্যালিডেশন খুবই সহজ এবং নিরাপদভাবে করা যায়।
উদাহরণ: ইনপুট ভ্যালিডেশন
ধরা যাক, আমরা একটি ফর্ম তৈরি করছি যেখানে ইউজার একটি ইমেইল ইনপুট করবে এবং আমরা যাচাই করতে চাই যে ইমেইলে একটি @ চিহ্ন রয়েছে কিনা।
import Html exposing (Html, div, input, button, text)
import Html.Events exposing (onClick)
import String exposing (contains)
type Msg = SubmitForm
type alias Model =
{ email : String
, isValid : Bool
}
update : Msg -> Model -> Model
update msg model =
case msg of
SubmitForm ->
if contains "@" model.email then
{ model | isValid = True }
else
{ model | isValid = False }
view : Model -> Html Msg
view model =
div []
[ input [ onClick (\_ -> SubmitForm) ] []
, button [ onClick SubmitForm ] [ text "Submit" ]
, if model.isValid then
text "Valid Email"
else
text "Invalid Email"
]
init : Model
init = { email = "", isValid = False }
main =
Browser.sandbox { init = init, update = update, view = view }এখানে:
SubmitFormমেসেজটি ব্যবহারকারীর ইনপুট যাচাই করে।contains "@"ফাংশনটি যাচাই করে যে ইমেইলে একটি@চিহ্ন রয়েছে কিনা।- যদি ইমেইল সঠিক হয়,
isValidফিল্ডটিTrueহবে, আর না হলেFalse।
২. Error Handling in Elm (এরর হ্যান্ডলিং)
Error Handling হল ত্রুটির ঘটনার মোকাবিলা করার প্রক্রিয়া, যাতে অ্যাপ্লিকেশন ক্র্যাশ না করে এবং ব্যবহারকারীর জন্য স্পষ্ট বার্তা প্রদর্শিত হয়। Elm এর টাইপ সিস্টেমের সাহায্যে আমরা সহজে error handling করতে পারি।
Elm এ Result এবং Maybe টাইপ ব্যবহৃত হয় ত্রুটির সাথে মোকাবিলা করতে।
১. Result Type (সফলতা এবং ব্যর্থতা)
Result টাইপ দুটি ভ্যালু ধারণ করে: Ok (সফল) এবং Err (ত্রুটি)। এটি সাধারণত যখন কোনো ফাংশন সফলভাবে কাজ করে বা কোনো ত্রুটি ঘটলে ব্যবহার করা হয়।
উদাহরণ: Result Type ব্যবহার
import Html exposing (Html, div, button, text)
import Html.Events exposing (onClick)
type Msg = SubmitForm
type alias Model =
{ number : String
, result : String
}
validateNumber : String -> Result String Int
validateNumber str =
case String.toInt str of
Just n -> Ok n
Nothing -> Err "Invalid number"
update : Msg -> Model -> Model
update msg model =
case msg of
SubmitForm ->
case validateNumber model.number of
Ok n -> { model | result = "Valid number: " ++ String.fromInt(n) }
Err err -> { model | result = err }
view : Model -> Html Msg
view model =
div []
[ button [ onClick SubmitForm ] [ text "Submit" ]
, div [] [ text model.result ]
]
init : Model
init = { number = "", result = "" }
main =
Browser.sandbox { init = init, update = update, view = view }এখানে:
validateNumberফাংশনটিStringথেকেIntতে রূপান্তর করার চেষ্টা করে এবং সফল হলেOkরিটার্ন করে, অন্যথায়Errরিটার্ন করে।Resultটাইপটি ব্যবহার করে আমরা সফলতা এবং ত্রুটি মোকাবিলা করছি।
২. Maybe Type (ডেটা থাকতে পারে বা না-ও থাকতে পারে)
Maybe টাইপটি ব্যবহৃত হয় যখন কোনো মান থাকতে পারে অথবা নাও থাকতে পারে, যেমন একটি অনুসন্ধান বা অ্যাক্সেস যেখানে ফলাফল অনিশ্চিত থাকে। এটি দুটি ভ্যালু ধারণ করে: Just (কিছু মান আছে) এবং Nothing (কোনো মান নেই)।
উদাহরণ: Maybe Type ব্যবহার
import Html exposing (Html, div, input, button, text)
import Html.Events exposing (onClick)
import String exposing (contains)
type Msg = SubmitForm
type alias Model =
{ email : String
, message : String
}
validateEmail : String -> Maybe String
validateEmail email =
if contains "@" email then
Just "Valid Email"
else
Nothing
update : Msg -> Model -> Model
update msg model =
case msg of
SubmitForm ->
case validateEmail model.email of
Just msg -> { model | message = msg }
Nothing -> { model | message = "Invalid Email" }
view : Model -> Html Msg
view model =
div []
[ input [ onClick (\_ -> SubmitForm) ] []
, button [ onClick SubmitForm ] [ text "Submit" ]
, div [] [ text model.message ]
]
init : Model
init = { email = "", message = "" }
main =
Browser.sandbox { init = init, update = update, view = view }এখানে:
validateEmailফাংশনটি চেক করে যে ইনপুটted ইমেইলে@রয়েছে কিনা এবং তার ভিত্তিতেJustঅথবাNothingরিটার্ন করে।Maybeটাইপ ব্যবহার করে সফলতা এবং ত্রুটি প্রক্রিয়া করা হচ্ছে।
৩. Error Handling with Custom Types
Custom Types এবং Union Types ব্যবহার করে আমরা আরো বিস্তারিত ত্রুটি হ্যান্ডলিং ব্যবস্থা তৈরি করতে পারি। এভাবে আমরা আরো স্পষ্ট বার্তা বা ত্রুটি ধরণ যুক্ত করতে পারি।
উদাহরণ: কাস্টম এরর টাইপ
type Error
= InvalidInput
| NotFound
| ServerError String
handleError : Error -> String
handleError error =
case error of
InvalidInput -> "The input is invalid."
NotFound -> "The resource was not found."
ServerError msg -> "Server error: " ++ msgএখানে, Error নামে একটি কাস্টম টাইপ তৈরি করা হয়েছে যা বিভিন্ন ধরনের ত্রুটি নির্দেশ করে এবং handleError ফাংশনটি সেই ত্রুটি অনুযায়ী বার্তা প্রদান করে।
উপসংহার
Input Validation এবং Error Handling Elm এ একটি শক্তিশালী ব্যবস্থা তৈরি করতে সহায়তা করে, যা অ্যাপ্লিকেশনকে আরও নির্ভরযোগ্য এবং ইউজার-ফ্রেন্ডলি করে তোলে। Elm এর টাইপ সিস্টেম, Result এবং Maybe টাইপস, এবং কাস্টম টাইপ ডিফিনিশন ব্যবহার করে আপনি ত্রুটি এবং ইনপুট যাচাইয়ের প্রক্রিয়াকে নিরাপদ ও সহজভাবে পরিচালনা করতে পারেন। Input Validation নিশ্চিত করে যে ইউজারের ইনপুট সঠিক এবং Error Handling ব্যবহারকারীদের কাছে স্পষ্ট ত্রুটি বার্তা পৌঁছানোর মাধ্যমে অ্যাপ্লিকেশনটির ব্যবহারযোগ্যতা বাড়ায়।
Read more