Result টাইপ একটি ফাংশনকে একটি একক মান রিটার্ন করা সম্ভব করে, যা নিচের সবকিছু নির্দেশ করে:
Result টাইপ একটি জেনেরিক টাইপ, যার ভিতরে দুটি অন্তর্নিহিত টাইপ থাকে:
Result টাইপটি একটি [ডিসক্রিমিনেটেড ইউনিয়ন][discriminated-union]-ও, যার নিচের কেসগুলো থাকতে পারে:
Ok <value> যা একটি সফল ফলাফল বোঝায়Error <reason> যা একটি ব্যর্থতা বোঝায়নিচের ফাংশনটি দেখায় কীভাবে একটি Result মান তৈরি করতে হয়:
let validateName (name: string) : Result<string, string> =
match name with
| null -> Error "Name not found."
| "" -> Error "Name is empty."
| _ -> Ok name
এই উদাহরণে, Ok মানটি একটি স্ট্রিং (প্রদত্ত নাম), আর Error মানটিও একটি স্ট্রিং (এররের কারণ, মানুষের পড়ার উপযোগী রূপে)।
Result মানের বিষয়বস্তু পড়ানিচের টাইপ ডেফিনিশন ও ফাংশন সিগনেচারটি খেয়াল করুন:
type FileOpenError =
| NotFound
| AccessDenied
| FileLocked
let openFile (filename: string) : Result<int, FileOpenError> =
openFile ফাংশনটি কল করা কোড প্যাটার্ন ম্যাচিং ব্যবহার করে সফল ও ব্যর্থ কেসগুলো সামলাতে পারে, যেমনটি নিচের উদাহরণে দেখানো হয়েছে:
match openFile(filename) with
| Ok handle -> doSomethingWithFile(handle)
| Error NotFound -> printfn $"Error: file {filename} was not found."
| Error AccessDenied -> printfn $"Error: you do not have permission to open the file {filename}."
| Error FileLocked -> printfn $"Error: file {filename} is already in use."
আপনার কাজ হলো একটি পাসওয়ার্ড চেকার তৈরি করা। একটি পাসওয়ার্ড চেকার ব্যবহারকারীর প্রস্তাবিত পাসওয়ার্ড যাচাই করে নিশ্চিত করে যে তা প্রদত্ত রিসোর্সে অ্যাক্সেস নিয়ন্ত্রণকারী প্রতিষ্ঠান কর্তৃক নির্ধারিত কিছু শর্ত পূরণ করে।
এই অনুশীলনীর জন্য পাসওয়ার্ডের শর্তগুলো হলো:
আপনার সমাধানে সফলতা বা ব্যর্থতার অবস্থা এনক্যাপসুলেট করতে একটি Result ব্যবহার করতে হবে।
সফলতার ক্ষেত্রে Result-কে ভ্যালিডেট করা পাসওয়ার্ডটি একটি স্ট্রিং হিসেবে প্রকাশ করতে হবে।
ব্যর্থতার ক্ষেত্রে Result-কে সেই নিয়মটি প্রকাশ করতে হবে যা ব্যর্থতার ক্ষেত্রে লঙ্ঘন করা হয়েছে।
এই অনুশীলনীর জন্য পাসওয়ার্ড চেকারটি হবে সরল। এটি কেবল তখনই নির্দেশ করবে যখন একটি মাত্র নিয়ম লঙ্ঘন করা হয়েছে। পরবর্তী একটি অনুশীলনীতে আরও বাস্তবসম্মত পাসওয়ার্ড চেকার নিয়ে আলোচনা করা হবে, যা একই সাথে একাধিক নিয়ম লঙ্ঘন করা হলে তা নির্দেশ করতে পারবে।
checkPassword ফাংশনটি ইমপ্লিমেন্ট করুনcheckPassword ফাংশনটি প্রদত্ত পাসওয়ার্ডটি উপরে উল্লিখিত নিয়মগুলোর সাথে যাচাই করে। ব্যর্থ হলে, এটি রেজাল্ট ভ্যালুর মধ্যে PasswordRule মানগুলোর একটি এনক্যাপসুলেট করে যে নিয়মটি লঙ্ঘন করা হয়েছে তা নির্দেশ করে।
checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter
getStatusMessage ফাংশনটি একটি স্ট্রিং রিটার্ন করে, যার মধ্যে checkPassword থেকে রিটার্ন করা ফলাফলের অর্থ বোঝানো হয় এমন একটি মানুষের পড়ার উপযোগী বার্তা থাকে।
getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
Exercism-এ সাইন আপ করুন, F# ট্র্যাকের 18টি কনসেপ্ট148টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।