গার্ড স্পষ্টতা উন্নত করতে পারেন
যখন আপনি গার্ড ব্যবহার করেন আপনার প্রহরীর সাফল্যের জন্য অনেক বেশি প্রত্যাশা থাকে এবং এটি কিছুটা গুরুত্বপূর্ণ যে এটি যদি সফল না হয় তবে আপনি কেবল স্কোপটি প্রারম্ভিকভাবে প্রস্থান করতে চান । আপনার মতো কোনও ফাইল / চিত্র উপস্থিত রয়েছে কিনা তা পাহারা দেওয়ার জন্য, যদি একটি অ্যারে এমপিটি হয় বা না থাকে।
func icon() -> UIImage {
guard let image = UIImage(named: "Photo") else {
return UIImage(named: "Default")! //This is your fallback
}
return image //-----------------you're always expecting/hoping this to happen
}
যদি আপনি উপরের কোডটি if-দিয়ে লিখেন তবে এটি পড়ার বিকাশকারীকে জানিয়ে দেয় যে এটি 50-50 এর বেশি। তবে আপনি যদি গার্ডটি ব্যবহার করেন তবে আপনি আপনার কোডটিতে স্বচ্ছতা যুক্ত করেন এবং এর থেকে বোঝা যায় আমি এটি সময়ের 95% কাজ করার প্রত্যাশা করি ... যদি এটি কখনও ব্যর্থ হয় তবে আমি জানি না কেন এটি হবে; এটি অত্যন্ত অসম্ভব ... তবে তার পরিবর্তে কেবলমাত্র এই ডিফল্ট চিত্রটি ব্যবহার করুন বা সম্ভবত কোন ভুল হয়েছে তা বর্ণনা করে কোনও অর্থবোধক বার্তা যুক্ত করুন!
চলুন guardগুলি যখন তারা পার্শ্ব প্রতিক্রিয়া তৈরি, রক্ষীদের হিসেবে ব্যবহার করা হয় প্রাকৃতিক প্রবাহ। elseক্লজগুলি পার্শ্ব প্রতিক্রিয়াগুলি প্রবর্তন করলে গার্ডদের এড়িয়ে চলুন । গার্ডগুলি প্রাথমিকভাবে প্রস্থান করার প্রস্তাব দিয়ে সঠিকভাবে সম্পাদন করার জন্য কোডের জন্য প্রয়োজনীয় শর্তাদি প্রতিষ্ঠা করে
আপনার কাছ থেকে ইতিবাচক শাখায় উল্লেখযোগ্য গণনার, refactor সঞ্চালন যখন ifএকটি থেকে guardবিবৃতি এবং ফলব্যাক মান elseদফা
থেকে: এরিকা সাদুনের সুইফ্ট স্টাইলের বই
উপরোক্ত পরামর্শ এবং পরিষ্কার কোডের ফলস্বরূপ, আপনি ব্যর্থ গার্ডের বিবৃতিগুলিতে দৃ as়তা যুক্ত করতে বা তার পক্ষে আরও বেশি বেশি সম্ভাবনা চান , এটি কেবল পাঠযোগ্যতার উন্নতি করে এবং অন্যান্য বিকাশকারীদের কাছে আপনি কী প্রত্যাশা করেছিলেন তা পরিষ্কার করে দেয়।
guard let image = UIImage(named: selectedImageName) else { // YESSSSSS
assertionFailure("Missing \(selectedImageName) asset")
return
}
guard let image = UIImage(named: selectedImageName) else { // NOOOOOOO
return
}
থেকে: এরিকা সাদুনের সুইফ্ট স্টাইলের বই + কিছু পরিবর্তন
(আপনি এজেন্টস / পূর্ব শর্তাদি ব্যবহার করবেন না if-letIt এটি ঠিক ঠিক বলে মনে হচ্ছে না)
প্রহরীদের ব্যবহার ডুমের পিরামিড এড়িয়ে স্বচ্ছতার উন্নতি করতে আপনাকে সহায়তা করে । দেখুন নিতিন এর উত্তর ।
গার্ড একটি নতুন ভেরিয়েবল তৈরি করে
এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে যে আমি বিশ্বাস করি যে কেউই ভালভাবে ব্যাখ্যা করতে পারেন নি।
উভয় guard letএবং ভেরিয়েবল if let আনপ্রেপ যাইহোক
সঙ্গে guard letআপনি তৈরি করছেন একটি নতুন পরিবর্তনশীল যে হবে অস্তিত্ব বাইরে elseবিবৃতি।
সঙ্গে if letআপনি তৈরি করছে না কোনো নতুন পরিবর্তনশীল পর অন্য বিবৃতি, আপনি শুধুমাত্র লিখুন কোড ব্লক যদি ঐচ্ছিক অ শূন্য হয়। নব নির্মিত পরিবর্তনশীল শুধুমাত্র বিদ্যমান ভিতরে কোড ব্লক না পরে!
guard let:
func someFunc(blog: String?) {
guard let blogName = blog else {
print("some ErrorMessage")
print(blogName) // will create an error Because blogName isn't defined yet
return
}
print(blogName) // You can access it here ie AFTER the guard statement!!
//And if I decided to do 'another' guard let with the same name ie 'blogName' then I would create an error!
guard let blogName = blog else { // errorLine: Definition Conflicts with previous value.
print(" Some errorMessage")
return
}
print(blogName)
}
if-let:
func someFunc(blog: String?) {
if let blogName1 = blog {
print(blogName1) // You can only access it inside the code block. Outside code block it doesn't exist!
}
if let blogName1 = blog { // No Error at this line! Because blogName only exists inside the code block ie {}
print(blogName1)
}
}
if letকরণীয় সম্পর্কে আরও তথ্যের জন্য : কেন alচ্ছিক বাঁধার পুনরায় ঘোষণার ফলে ত্রুটি তৈরি হয় না
গার্ডের স্কোপ প্রস্থান করা প্রয়োজন
(রব নেপিয়ারের উত্তরেও উল্লেখ করা হয়েছে):
আপনি অবশ্যই একটি ফানকের ভিতরেguard সংজ্ঞা দিয়েছেন । এটা তোলে প্রধান উদ্দেশ্য, টি থামিয়ে দিতে / রিটার্ন / প্রস্থান সুযোগ হয় যদি একটি শর্ত পূরণ না হয়:
var str : String?
guard let blogName1 = str else {
print("some error")
return // Error: Return invalid outside of a func
}
print (blogName1)
জন্য if letযদি আপনি কোন func ভিতরে এটা থাকতে হবে না:
var str : String?
if let blogName1 = str {
print(blogName1) // You don't get any errors!
}
guard বনাম if
এটি লক্ষণীয় যে এটি guard letবনাম if letএবং guardবনাম হিসাবে এই প্রশ্নটি দেখতে আরও উপযুক্ত if।
স্বতন্ত্র ifকোনও আনারপ্যাটিং করে না, এমনকি কোনও স্ট্যান্ডেলোনও করে না guard। নীচে উদাহরণ দেখুন। কোনও মান হলে তা তাড়াতাড়ি প্রস্থান করে না nil। Optionচ্ছিক মান নেই। কোনও শর্ত পূরণ না হলে এটি খুব তাড়াতাড়ি প্রস্থান করে।
let array = ["a", "b", "c"]
func subscript(at index: Int) -> String?{
guard index > 0, index < array.count else { return nil} // exit early with bad index
return array[index]
}
if letহলে ব্যবহার করুনnon-nil। কেসguardযখনnilকোনও ধরণের ত্রুটি উপস্থাপন করে তখন ব্যবহার করুন ।