সুইফ্টে একটি alচ্ছিক হ'ল এক প্রকার যা মান বা কোনও মান রাখে না। বিকল্পগুলিকে ?
কোনও প্রকারে যুক্ত করে লেখা হয় :
var name: String? = "Bertie"
বিকল্পগুলি (জেনারিক্স সহ) বোঝার জন্য সবচেয়ে কঠিন সুইফ্ট ধারণাগুলি। সেগুলি কীভাবে লিখিত এবং ব্যবহৃত হয় সেগুলির কারণে তারা কী সে সম্পর্কে একটি ভুল ধারণা পাওয়া সহজ। সাধারণ স্ট্রিং তৈরি করার জন্য উপরের alচ্ছিকের সাথে তুলনা করুন:
var name: String = "Bertie" // No "?" after String
সিনট্যাক্স থেকে দেখে মনে হচ্ছে anচ্ছিক স্ট্রিং একটি সাধারণ স্ট্রিংয়ের সাথে খুব মিল। এটা না। একটি alচ্ছিক স্ট্রিং কোনও স্ট্রিং নয় যা কিছু "alচ্ছিক" সেটিংস চালু আছে। এটি স্ট্রিংয়ের কোনও বিশেষ জাত নয়। একটি স্ট্রিং এবং একটি alচ্ছিক স্ট্রিং সম্পূর্ণ ভিন্ন ধরণের।
এখানে জানা সবচেয়ে গুরুত্বপূর্ণ বিষয়: একটি alচ্ছিক হ'ল এক ধরণের ধারক। একটি optionচ্ছিক স্ট্রিং একটি ধারক যা একটি স্ট্রিং থাকতে পারে। Optionচ্ছিক ইন্ট হ'ল একটি ধারক যা অন্তর্ভুক্ত থাকতে পারে। একধরণের পার্সেল হিসাবে alচ্ছিক ভাবেন। আপনি এটি খোলার আগে (বা ofচ্ছিকদের ভাষায় "মোড়ক") আপনি জানবেন না এতে কিছু আছে বা কিছুই নেই।
আপনি যে কোনও সুইফট ফাইলে "ptionচ্ছিক" টাইপ করে এবং এটিতে।-ক্লিক করে সুইফট স্ট্যান্ডার্ড লাইব্রেরিতে বিকল্পগুলি কীভাবে প্রয়োগ করা হয় তা দেখতে পাবেন। সংজ্ঞাটির গুরুত্বপূর্ণ অংশটি এখানে:
enum Optional<Wrapped> {
case none
case some(Wrapped)
}
Ptionচ্ছিক কেবল একটি enum
যা দুটি ক্ষেত্রে একটি হতে পারে: .none
বা .some
। যদি এটি হয় তবে এর সাথে .some
সম্পর্কিত মান রয়েছে যা উপরের উদাহরণে String
"হ্যালো" হবে। সম্পর্কিত মানটিতে একটি প্রকার দেওয়ার জন্য একটি usesচ্ছিক জেনেরিক্স ব্যবহার করে। একটি ঐচ্ছিক স্ট্রিং ধরণ নয় String
, এটা Optional
, অথবা আরো স্পষ্ট করে Optional<String>
।
বিকল্পগুলির সাথে সুইফট যা কিছু করে তা হ'ল পাঠ এবং লেখার কোডকে আরও সাবলীল করে তোলার জন্য যাদু। দুর্ভাগ্যক্রমে এটি বাস্তবে যেভাবে কাজ করে তা অস্পষ্ট করে। আমি কিছু কৌশল পরে যাব।
দ্রষ্টব্য: আমি optionচ্ছিক ভেরিয়েবল সম্পর্কে অনেক কথা বলব, তবে এটি optionচ্ছিক ধ্রুবকগুলি তৈরি করাও ঠিক। প্রকারের ধরণের তৈরি হচ্ছে তা বোঝার জন্য আমি তাদের ধরণের সাথে সমস্ত ভেরিয়েবল চিহ্নিত করি, তবে আপনাকে নিজের কোডে থাকতে হবে না।
বিকল্পগুলি কীভাবে তৈরি করবেন
Alচ্ছিক তৈরি করতে, ?
আপনি যে ধরণের মোড়াতে চান তার পরে একটি যুক্ত করুন । যে কোনও ধরণের alচ্ছিক এমনকি আপনার নিজস্ব কাস্টম প্রকারও হতে পারে। টাইপ এবং এর মধ্যে আপনার কোনও স্থান থাকতে পারে না ?
।
var name: String? = "Bob" // Create an optional String that contains "Bob"
var peter: Person? = Person() // An optional "Person" (custom type)
// A class with a String and an optional String property
class Car {
var modelName: String // must exist
var internalName: String? // may or may not exist
}
বিকল্পগুলি ব্যবহার করে Using
nil
এটির একটি মান আছে কিনা তা দেখার জন্য আপনি একটি alচ্ছিক তুলনা করতে পারেন:
var name: String? = "Bob"
name = nil // Set name to nil, the absence of a value
if name != nil {
print("There is a name")
}
if name == nil { // Could also use an "else"
print("Name has no value")
}
এটি কিছুটা বিভ্রান্তিকর। এটি বোঝায় যে anচ্ছিক হয় হয় একটি জিনিস বা অন্য কোনও। এটি হয় নিল বা এটি "বব"। এটি সত্য নয়, alচ্ছিক অন্য কিছুতে রূপান্তরিত করে না। এটিকে শূন্যের সাথে তুলনা করা সহজ-পড়ার কোডটি সহজ করার কৌশল। যদি একটি alচ্ছিক শূন্যের সমান হয় তবে এর অর্থ হ'ল এনাম বর্তমানে সেট করা আছে .none
।
কেবলমাত্র বিকল্পগুলি শূন্য হতে পারে
আপনি যদি শূন্যের জন্য একটি অ-alচ্ছিক ভেরিয়েবল সেট করার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন।
var red: String = "Red"
red = nil // error: nil cannot be assigned to type 'String'
বিকল্পগুলি দেখার আরেকটি উপায় হ'ল স্বাভাবিক সুইফ্ট ভেরিয়েবলের পরিপূরক হিসাবে। এগুলি একটি ভেরিয়েবলের প্রতিপক্ষ যা একটি মান থাকার গ্যারান্টিযুক্ত। সুইফ্ট একটি সতর্ক ভাষা যা অস্পষ্টতাকে ঘৃণা করে। বেশিরভাগ ভেরিয়েবলগুলি অ-বিকল্প হিসাবে সংজ্ঞায়িত করা হয় তবে কখনও কখনও এটি সম্ভব হয় না। উদাহরণস্বরূপ, এমন একটি ভিউ কন্ট্রোলার কল্পনা করুন যা কোনও ক্যাশে বা নেটওয়ার্ক থেকে কোনও চিত্র লোড করে। ভিউ কন্ট্রোলার তৈরি হওয়ার সময় এটিতে সেই চিত্র থাকতে পারে এবং নাও থাকতে পারে। ইমেজ ভেরিয়েবলের মানটির গ্যারান্টি দেওয়ার কোনও উপায় নেই। এই ক্ষেত্রে আপনাকে এটি itচ্ছিক করতে হবে। এটি শুরু হয় nil
এবং যখন চিত্রটি পুনরুদ্ধার করা হয়, alচ্ছিক একটি মান পায়।
একটি alচ্ছিক ব্যবহার প্রোগ্রামারদের অভিপ্রায় প্রকাশ করে। অবজেক্টিভ-সি এর সাথে তুলনা করুন, যেখানে কোনও বস্তু শূন্য হতে পারে, সুইফটকে কখন কোনও মূল্য অনুপস্থিত হতে পারে এবং কখন এটির গ্যারান্টি রয়েছে তা সম্পর্কে আপনাকে পরিষ্কার হওয়া দরকার।
একটি alচ্ছিক ব্যবহার করতে, আপনি এটি "আনারপ" করুন
একটি বাস্তবের String
জায়গায় ofচ্ছিক ব্যবহার করা যায় না String
। Optionচ্ছিকের অভ্যন্তরে মোড়ানো মানটি ব্যবহার করতে, আপনাকে এটি মোছা আবশ্যক। Anচ্ছিক আন-মোড়কের সহজ উপায় হ'ল alচ্ছিক !
নামের পরে যুক্ত করা । একে বলা হয় "জোর করে মোড়ানো"। এটি alচ্ছিক (মূল ধরণ হিসাবে) এর অভ্যন্তরে মানটি প্রদান করে তবে is nil
চ্ছিক হলে এটি রানটাইম ক্র্যাশ ঘটায়। মোড়ক দেওয়ার আগে আপনার নিশ্চিত হওয়া উচিত যে এর কোনও মান আছে।
var name: String? = "Bob"
let unwrappedName: String = name!
print("Unwrapped name: \(unwrappedName)")
name = nil
let nilName: String = name! // Runtime crash. Unexpected nil.
Ckingচ্ছিক চেক করা এবং ব্যবহার করা
যেহেতু wচ্ছিকভাবে মোড়ানো এবং alচ্ছিক ব্যবহার করার আগে আপনার সর্বদা শূন্যের জন্য পরীক্ষা করা উচিত, এটি একটি সাধারণ প্যাটার্ন:
var mealPreference: String? = "Vegetarian"
if mealPreference != nil {
let unwrappedMealPreference: String = mealPreference!
print("Meal: \(unwrappedMealPreference)") // or do something useful
}
এই প্যাটার্নে আপনি পরীক্ষা করে দেখুন যে কোনও মান উপস্থিত রয়েছে, তারপরে আপনি যখন নিশ্চিত হন যে এটি ব্যবহারের জন্য আপনি অস্থায়ী ধ্রুবকটিকে আন-মোড়কে জোর করে। যেহেতু এটি এমন সাধারণ জিনিস, তাই সুইফট "যদি দেওয়া হয়" ব্যবহার করে একটি শর্টকাট সরবরাহ করে। এটিকে "alচ্ছিক বাঁধাই" বলা হয়।
var mealPreference: String? = "Vegetarian"
if let unwrappedMealPreference: String = mealPreference {
print("Meal: \(unwrappedMealPreference)")
}
এটি একটি অস্থায়ী ধ্রুবক তৈরি করে (বা আপনি যদি প্রতিস্থাপন let
করেন তবে পরিবর্তনশীল var
) যার স্কোপগুলি কেবল যদি ইফ এর ধনুর্বন্ধনীগুলির মধ্যে থাকে। "আনরোপডমিলিপ্রিফারেন্স" বা "রিয়েলমিলিপ্রিফারেন্স" এর মতো একটি নাম ব্যবহার করার কারণে, ব্র্যাকেটের স্কোপের মধ্যে একটি অস্থায়ী নাম তৈরি করে সুইফট আপনাকে মূল পরিবর্তনশীল নামটি পুনরায় ব্যবহার করতে দেয় allows
var mealPreference: String? = "Vegetarian"
if let mealPreference: String = mealPreference {
print("Meal: \(mealPreference)") // separate from the other mealPreference
}
একটি ভিন্ন ভেরিয়েবল ব্যবহৃত হয় তা দেখানোর জন্য এখানে কিছু কোড রয়েছে:
var mealPreference: String? = "Vegetarian"
if var mealPreference: String = mealPreference {
print("Meal: \(mealPreference)") // mealPreference is a String, not a String?
mealPreference = "Beef" // No effect on original
}
// This is the original mealPreference
print("Meal: \(mealPreference)") // Prints "Meal: Optional("Vegetarian")"
Alচ্ছিক বাঁধাই checkingচ্ছিক শূন্য হয় কিনা তা পরীক্ষা করে পরীক্ষা করে কাজ করে। যদি এটি না হয় তবে এটি সরবরাহকৃত ধ্রুবকটির মধ্যে alচ্ছিকটিকে আবদ্ধ করে এবং ব্লকটি কার্যকর করে। এক্সকোড ৮.৩ এবং তারপরে (সুইফট ৩.১) এ, এটির মতো anচ্ছিক প্রিন্ট করার চেষ্টা করা একটি অকেজো সতর্কতা সৃষ্টি করবে। debugDescription
এটি নিঃশব্দ করতে alচ্ছিক ব্যবহার করুন :
print("\(mealPreference.debugDescription)")
বিকল্পগুলি কী কী?
বিকল্পগুলির দুটি ব্যবহারের কেস রয়েছে:
- যে জিনিসগুলি ব্যর্থ হতে পারে (আমি কিছু আশা করছিলাম তবে আমি কিছুই পাইনি)
- যে জিনিসগুলি এখন কিছুই নয় তবে পরে কিছু হতে পারে (এবং তদ্বিপরীত)
কিছু দৃ concrete় উদাহরণ:
- একটি সম্পত্তি যা আছে বা না থাকতে পারে, মত
middleName
বা spouse
একটি Person
শ্রেণী
- একটি পদ্ধতি যা কোনও মান বা কিছুই ফিরিয়ে আনতে পারে, যেমন অ্যারেতে ম্যাচ সন্ধান করার মতো
- একটি পদ্ধতি যা ফলাফল দেয় বা ত্রুটি পেতে পারে এবং কিছুই ফিরিয়ে দিতে পারে না, যেমন কোনও ফাইলের বিষয়বস্তু পড়ার চেষ্টা করা (যা সাধারণত ফাইলটির ডেটা ফেরত দেয়) তবে ফাইলটি বিদ্যমান নেই
- প্রতিনিধি বৈশিষ্ট্য, যা সর্বদা সেট করতে হবে না এবং সাধারণত আরম্ভের পরে সেট করা থাকে
weak
ক্লাসে সম্পত্তি জন্য । তারা যে বিষয়টি নির্দেশ করে তা nil
যে কোনও সময় সেট করা যেতে পারে
- একটি বৃহত সংস্থান যা মেমরি পুনরুদ্ধার করতে মুক্তি দিতে পারে
- যখন কখন কোনও মান সেট করা হয়েছে তা জানতে (ডেটা এখনও লোড করা হয়নি> ডেটা) ডেটা আলাদা ডাটা ব্যবহারের পরিবর্তে প্রয়োজন
Boolean
উদ্দেশ্যসমূহ-সিতে বিকল্পগুলির অস্তিত্ব নেই তবে এখানে একটি সমমানের ধারণা রয়েছে, ফিরে আসার শূন্য রয়েছে। যে পদার্থগুলি কোনও বস্তুকে ফেরত দিতে পারে তার পরিবর্তে শূন্য করতে পারে। এর অর্থ "একটি বৈধ অবজেক্টের অনুপস্থিতি" বোঝাতে নেওয়া হয় এবং প্রায়শই এটি কিছু ভুল হয়ে গেছে বলে ব্যবহৃত হয়। এটি কেবল অবজেক্টিভ-সি অবজেক্টের সাথে কাজ করে, আদিম বা বেসিক সি-টাইপগুলি (এনামস, স্ট্রাক্ট) দিয়ে নয়। উদ্দেশ্য-সি এর প্রায়শই এই মানগুলির অনুপস্থিতি উপস্থাপনের জন্য বিশেষ ধরনের ( NSNotFound
যা সত্যই NSIntegerMax
, kCLLocationCoordinate2DInvalid
একটি অবৈধ স্থানাঙ্কের প্রতিনিধিত্ব করতে, -1
বা কিছু নেতিবাচক মানও ব্যবহৃত হয়) থাকে। কোডারকে এই বিশেষ মানগুলি সম্পর্কে জানতে হবে যাতে তাদের প্রতিটি মামলার জন্য ডকুমেন্টেড এবং শিখতে হবে। যদি কোনও পদ্ধতি nil
প্যারামিটার হিসাবে নিতে না পারে তবে এটি নথিভুক্ত করতে হবে। উদ্দেশ্য-সি তে,nil
পয়েন্টার হিসাবে সমস্ত বস্তু যেমন পয়েন্টার হিসাবে সংজ্ঞায়িত করা হয়েছিল তবে nil
নির্দিষ্ট (শূন্য) ঠিকানার দিকে নির্দেশিত হয়েছিল। সুইফটে, nil
একটি আক্ষরিক যার অর্থ একটি নির্দিষ্ট ধরণের অনুপস্থিতি।
তুলনা nil
আপনি এই হিসাবে যে কোনও alচ্ছিক ব্যবহার করতে সক্ষম হতেন Boolean
:
let leatherTrim: CarExtras? = nil
if leatherTrim {
price = price + 1000
}
সুইফটের আরও সাম্প্রতিক সংস্করণগুলিতে আপনাকে ব্যবহার করতে হবে leatherTrim != nil
। কেন? সমস্যাটি হ'ল একটি Boolean
anচ্ছিকভাবে মোড়ানো যায়। আপনার যদি এটির Boolean
মতো থাকে:
var ambiguous: Boolean? = false
এর দুটি ধরণের "মিথ্যা" রয়েছে, একটি যেখানে মূল্য নেই এবং একটি যেখানে এর মান রয়েছে তবে মানটি false
। সুইফ্ট অস্পষ্টতাকে ঘৃণা করে তাই এখন আপনাকে অবশ্যই সর্বদা একটি alচ্ছিক বিরুদ্ধে পরীক্ষা করতে হবে nil
।
আপনি ভাবতে পারেন যে anচ্ছিকের Boolean
মূল বিষয়টি কী? অন্যান্য বিকল্পগুলির মতো .none
রাজ্যও ইঙ্গিত দিতে পারে যে মানটি এখনও অজানা। নেটওয়ার্ক কলের অপর প্রান্তে এমন কিছু কিছু থাকতে পারে যা পোল করতে কিছুটা সময় নেয়। Alচ্ছিক বুলিয়ানদের " ত্রি-মান বুলিয়ানস "ও বলা হয়
দ্রুত কৌশল
বিকল্পগুলি কাজ করার জন্য সুইফট কিছু কৌশল ব্যবহার করে। সাধারণ দেখতে optionচ্ছিক কোডের এই তিনটি লাইন বিবেচনা করুন;
var religiousAffiliation: String? = "Rastafarian"
religiousAffiliation = nil
if religiousAffiliation != nil { ... }
এই লাইনের কোনওটিই সংকলন করা উচিত নয়।
- প্রথম লাইনটি স্ট্রিং আক্ষরিক, দুটি ভিন্ন ধরণের ব্যবহার করে একটি alচ্ছিক স্ট্রিং সেট করে। এমনকি এটির
String
প্রকারগুলি আলাদা হলেও
- দ্বিতীয় লাইনটি একটি alচ্ছিক স্ট্রিংকে শূন্য করে, দুটি ভিন্ন ধরণের সেট করে
- তৃতীয় লাইন একটি optionচ্ছিক স্ট্রিংকে শূন্যের সাথে তুলনা করে, দুটি ভিন্ন ধরণের
আমি বিকল্পগুলির প্রয়োগের কিছু বিবরণ যাব যা এই লাইনগুলিকে কাজ করতে দেয়।
Anচ্ছিক তৈরি করা
?
একটি alচ্ছিক তৈরি করতে ব্যবহার করা সিনট্যাকটিক চিনি, সুইফ্ট সংকলক দ্বারা সক্ষম। আপনি যদি এটি দীর্ঘতর করতে চান তবে আপনি এটির মতো একটি alচ্ছিক তৈরি করতে পারেন:
var name: Optional<String> = Optional("Bob")
এটি কলটির Optional
প্রথম ইনিশিয়ালাইজার, public init(_ some: Wrapped)
যা প্রথম বন্ধনীগুলির মধ্যে ব্যবহৃত ধরণের থেকে .চ্ছিক সম্পর্কিত সম্পর্কিত ধরণের অনুভূত করে।
Creatingচ্ছিক তৈরি এবং সেট করার আরও দীর্ঘতর উপায়:
var serialNumber:String? = Optional.none
serialNumber = Optional.some("1234")
print("\(serialNumber.debugDescription)")
একটি alচ্ছিক সেট করা হচ্ছে nil
আপনি কোনও প্রাথমিক মান ছাড়াই alচ্ছিক তৈরি করতে পারেন, বা প্রাথমিক মান সহ একটি তৈরি করতে পারেন nil
(উভয়েরই একই ফলাফল রয়েছে)।
var name: String?
var name: String? = nil
সমানতে বিকল্প বিকল্পগুলি nil
প্রোটোকল ExpressibleByNilLiteral
(পূর্বে নামযুক্ত NilLiteralConvertible
) দ্বারা সক্ষম করা হয়েছে । Optional
Secondচ্ছিকটি তৈরি করা হয় এর দ্বিতীয় সূচক public init(nilLiteral: ())
,। দস্তাবেজগুলি বলে যে আপনাকে বিকল্পগুলি ExpressibleByNilLiteral
ব্যতীত অন্য কোনও কিছুর জন্য ব্যবহার করা উচিত নয় , যেহেতু এটি আপনার কোডটিতে শূন্যতার অর্থ পরিবর্তন করে, তবে এটি করা সম্ভব:
class Clint: ExpressibleByNilLiteral {
var name: String?
required init(nilLiteral: ()) {
name = "The Man with No Name"
}
}
let clint: Clint = nil // Would normally give an error
print("\(clint.name)")
একই প্রোটোকল আপনাকে ইতিমধ্যে তৈরি alচ্ছিক এটিকে সেট করতে দেয় nil
। যদিও এটি প্রস্তাবিত নয়, আপনি সরাসরি শূন্য আক্ষরিক প্রাথমিক ব্যবহার করতে পারেন:
var name: Optional<String> = Optional(nilLiteral: ())
একটি alচ্ছিক তুলনা nil
বিকল্পগুলি দুটি বিশেষ "==" এবং "! =" অপারেটর সংজ্ঞায়িত করে, যা আপনি Optional
সংজ্ঞায় দেখতে পাচ্ছেন । প্রথমটি ==
আপনাকে কোনও বৈকল্পিক শূন্যের সমান কিনা তা পরীক্ষা করতে দেয়। .None এ সেট করা দুটি পৃথক বিকল্প সবসময় সমান হবে যদি সম্পর্কিত ধরণেরগুলি একই হয়। যখন আপনি শূন্যের সাথে তুলনা করেন, নেপথ্যে পর্দার পিছনে সুইফট একই জাতীয় প্রকারের একটি alচ্ছিক তৈরি করে।
// How Swift actually compares to nil
var tuxedoRequired: String? = nil
let temp: Optional<String> = Optional.none
if tuxedoRequired == temp { // equivalent to if tuxedoRequired == nil
print("tuxedoRequired is nil")
}
দ্বিতীয় ==
অপারেটর আপনাকে দুটি বিকল্পের তুলনা করতে দেয়। উভয়ই একই ধরণের হতে হবে এবং সেই ধরণের সাথে সামঞ্জস্য করা দরকার Equatable
(প্রোটোকল যা নিয়মিত "==" অপারেটরের সাথে জিনিসগুলির তুলনা করতে দেয়)। সুইফ্ট (সম্ভবত) দুটি মানকে আবৃত করে এবং সরাসরি তাদের তুলনা করে। এটি বিকল্প বা এক বা উভয়ই ক্ষেত্রে কেস পরিচালনা করে .none
। nil
আক্ষরিক তুলনা মধ্যে পার্থক্য নোট করুন ।
তদ্ব্যতীত, এটি Equatable
আপনাকে কোনও প্রকারকে alচ্ছিক মোড়কে সেই ধরণের তুলনা করতে দেয় :
let numberToFind: Int = 23
let numberFromString: Int? = Int("23") // Optional(23)
if numberToFind == numberFromString {
print("It's a match!") // Prints "It's a match!"
}
পর্দার আড়ালে, সুইফ্ট তুলনা করার আগে অ-alচ্ছিককে মোড়ক দেয়। এটি আক্ষরিক সাথেও কাজ করে ( if 23 == numberFromString {
)
আমি বলেছিলাম যে দুটি ==
অপারেটর রয়েছে, কিন্তু আসলে তৃতীয়টি রয়েছে যা আপনাকে nil
তুলনার বাম দিকে রাখার অনুমতি দেয়
if nil == name { ... }
নামকরণ বিকল্প
অ-.চ্ছিক প্রকারের থেকে আলাদাভাবে alচ্ছিক নামকরণের জন্য কোনও সুইফট কনভেনশন নেই। লোকেরা এটিতে optionচ্ছিক (যেমন "alচ্ছিকমিল্ডনাম", বা "সম্ভাব্য নংআরআস্ট্রস্ট্রিং") দেখানোর জন্য নামের সাথে কিছু যুক্ত করা এড়াতে পারে এবং ঘোষণাটি এটি একটি alচ্ছিক ধরণের বলে দেখায়। আপনি যখন কোনও alচ্ছিক থেকে মানটি ধরে রাখতে কোনও নাম রাখতে চান তখন এটি কঠিন হয়ে যায়। "মিডলনাম" নামটি বোঝায় যে এটি একটি স্ট্রিং টাইপ, সুতরাং আপনি যখন এখান থেকে স্ট্রিংয়ের মানটি বের করেন তখন আপনি প্রায়শই "আসলিমিডেলনাম" বা "মোড়কবিহীনমিজালনাম" বা "রিয়েলমিজালনাম" এর মতো নামগুলি শেষ করতে পারেন। Aroundচ্ছিক বাঁধাই ব্যবহার করুন এবং ভেরিয়েবলের নামটি পুনরায় ব্যবহার করুন around
সরকারী সংজ্ঞা
থেকে "বুনিয়াদি" এ সুইফট প্রোগ্রামিং ভাষা :
সুইফট optionচ্ছিক প্রকারগুলিও প্রবর্তন করে, যা কোনও মানের অভাবকে পরিচালনা করে। বিকল্পগুলি হয় বলে যে "একটি মান আছে এবং এটি x এর সমান" বা "এর কোনও মান হয় না"। বিকল্পগুলি উদ্দেশ্য-সি-তে পয়েন্টার সহ শূন্য ব্যবহার করার মতো, তবে তারা কেবল ক্লাস নয়, কোনও ধরণের জন্য কাজ করে। অপশনালগুলি অবজেক্টিভ-সি এর নীল পয়েন্টারগুলির চেয়ে নিরাপদ এবং আরও অভিব্যক্তিপূর্ণ এবং সুইফটের অনেক শক্তিশালী বৈশিষ্ট্যগুলির কেন্দ্রবিন্দুতে।
বিকল্পগুলি হ'ল সত্য যে সুইফট একটি প্রকার সুরক্ষিত ভাষা। আপনার কোডটি যে ধরণের মানগুলির সাথে কাজ করতে পারে সে সম্পর্কে স্যুইফ্ট আপনাকে পরিষ্কার হতে সহায়তা করে। যদি আপনার কোডের কোনও অংশ স্ট্রিংয়ের প্রত্যাশা করে তবে প্রকার সুরক্ষা আপনাকে ভুল করে এটি কোনও আন্তঃ পাস করতে বাধা দেয়। এটি আপনাকে উন্নয়ন প্রক্রিয়াতে যত তাড়াতাড়ি সম্ভব ত্রুটিগুলি ধরা এবং ঠিক করতে সক্ষম করে।
শেষ করতে এখানে 1899 সালের বিকল্প সম্পর্কে একটি কবিতা রয়েছে:
গতকাল সিঁড়ির উপরে
আমি এমন এক ব্যক্তির সাথে সাক্ষাত হয়েছিল যিনি সেখানে
ছিলেন না তিনি আজ
আর সেখানে ছিলেন না আমার ইচ্ছা, আমি আশা করি তিনি অ্যান্টিগনিশকে দূরে সরিয়ে
দিতেন
আরও সংস্থানসমূহ: