ব্যবহার if
, ifelse
এবং`if`
আর। গল্ফ-অনুকূল সমাধানগুলিতে যদি বিবৃতিগুলি করতে পারে তবে অনেকগুলি পরিবর্তন হতে পারে।
অধিকার
if
নিয়ন্ত্রণ প্রবাহ জন্য হয়। এটি ভেক্টরাইজড নয়, অর্থাত্ 1 দৈর্ঘ্যের শর্তগুলি মূল্যায়ন করতে পারে It এটির else
(বিকল্পভাবে) অন্য কোনও মান ফেরত দেওয়া দরকার ।
ifelse
একটি ফাংশন। এটি ভেক্টরাইজড এবং নির্বিচার দৈর্ঘ্যের মানগুলি ফিরিয়ে দিতে পারে। এটির তৃতীয় যুক্তি (অন্য মানটি) ফরয *
`if`
একই সিনট্যাক্স সহ একটি ফাংশন ifelse
। এটি ভেক্টরাইজড নয়, কোনও রিটার্ন যুক্তিও বাধ্যতামূলক নয়।
* এটি প্রযুক্তিগতভাবে বাধ্যতামূলক নয়; ifelse(TRUE,x)
ঠিক কাজ করে তবে তৃতীয় যুক্তিটি খালি থাকলে এবং শর্তটি যদি মূল্যায়ন করে তবে এটি ত্রুটি ছুঁড়ে FALSE
। সুতরাং এটি ব্যবহার করা কেবলমাত্র নিরাপদ যদি আপনি নিশ্চিত হন যে শর্তটি সর্বদা রয়েছে TRUE
, এবং যদি এটি হয় তবে আপনি কেন যদি একটি বিবৃতি দিয়ে বিরক্ত করছেন?
উদাহরণ
এগুলি সমস্ত সমতুল্য:
if(x)y else z # 13 bytes
ifelse(x,y,z) # 13 bytes
`if`(x,y,z) # 11 bytes
else
আপনি যদি কোডটিতে সরাসরি স্ট্রিং ব্যবহার করেন তবে আশেপাশের স্পেসগুলির প্রয়োজন নেই:
if(x)"foo"else"bar" # 19 bytes
ifelse(x,"foo","bar") # 21 bytes
`if`(x,"foo","bar") # 19 bytes
এখনও অবধি, `if`
বিজয়ী মনে হচ্ছে, যতক্ষণ না আমাদের কাছে ভেক্টরাইজড ইনপুট নেই। তবে যেসব ক্ষেত্রে আমরা অন্য শর্তটি যত্ন করি না সেগুলি সম্পর্কে কী বলা যায়? বলুন আমরা শর্তটি থাকলে কেবল কিছু কোড কার্যকর করতে চাই TRUE
। একা এক লাইনের কোডের জন্য, if
সাধারণত সেরা:
if(x)z=f(y) # 11 bytes
ifelse(x,z<-f(y),0) # 19 bytes
`if`(x,z<-f(y)) # 15 bytes
একাধিক লাইনের কোডের জন্য, if
এখনও বিজয়ী:
if(x){z=f(y);a=g(y)} # 20 bytes
ifelse(x,{z=f(y);a=g(y)},0) # 27 bytes
`if`(x,{z=f(y);a=g(y)}) # 23 bytes
আরেকটা সম্ভাবনাও যেখানে আমরা এর কি অন্য শর্ত যত্নশীল, এবং যেখানে আমরা নির্বিচারে কোড চালানো বদলে কোন মান ফিরিয়ে দিতে চাই। এই ক্ষেত্রে, if
এবং `if`
বাইট গণনা সমতুল্য।
if(x)a=b else z=b # 17 bytes
ifelse(x,a<-b,z<-b) # 19 bytes
`if`(x,a<-b,z<-b) # 17 bytes
if(x){z=y;a=b}else z=b # 22 bytes
ifelse(x,{z=y;a=b},z<-b) # 24 bytes
`if`(x,{z=y;a=b},z<-b) # 22 bytes
if(x)a=b else{z=b;a=y} # 22 bytes
ifelse(x,a<-b,{z=b;a=y}) # 24 bytes
`if`(x,a<-b,{z=b;a=y}) # 22 bytes
if(x){z=y;a=b}else{z=b;a=y} # 27 bytes
ifelse(x,{z=y;a=b},{z=b;a=y}) # 29 bytes
`if`(x,{z=y;a=b},{z=b;a=y}) # 27 bytes
সারাংশ
আপনার ifelse
দৈর্ঘ্যের ইনপুট থাকলে> 1 ব্যবহার করুন।
আপনি যদি অনেকগুলি কোডের কোড প্রয়োগের পরিবর্তে কোনও সাধারণ মানটি ফিরিয়ে দিচ্ছেন তবে `if`
ফাংশনটি ব্যবহার করা সম্ভবত পুরো if
... else
স্টেটমেন্টের চেয়ে কম ।
আপনি যদি কেবল একটি একক মান চান তবে TRUE
, ব্যবহার করুন if
।
স্বেচ্ছাসেবক কোড সম্পাদন করার জন্য, `if`
এবং if
বাইট গণনা অনুসারে সাধারণত একই হয়; আমি সুপারিশ করি if
মূলত কারণ এটি পড়া সহজ।