বহু ভাষা পাইথন সহ একটি অভিব্যক্তি না করে অ্যাসাইনমেন্টের বিবরণীটি বেছে নেয়:
foo = 42 # works
if foo = 42: print "hi" # dies
bar(foo = 42) # keyword arg
এবং গোলং:
var foo int
foo = 42 # works
if foo = 42 { fmt.Printn("hi") } # dies
অন্যান্য ভাষায় অ্যাসাইনমেন্ট নেই, বরং স্কোপড বাইন্ডিং রয়েছে, যেমন ওক্যামেল:
let foo = 42 in
if foo = 42 then
print_string "hi"
তবে let
এটি একটি অভিব্যক্তি নিজেই।
অ্যাসাইনমেন্টের অনুমতি দেওয়ার সুবিধাটি হ'ল আমরা শর্তসাপেক্ষে কোনও ফাংশনের রিটার্ন মানটি সরাসরি পরীক্ষা করতে পারি, যেমন এই পার্ল স্নিপেটে:
if (my $result = some_computation()) {
say "We succeeded, and the result is $result";
}
else {
warn "Failed with $result";
}
পার্ল অতিরিক্তভাবে কেবলমাত্র শর্তসাপেক্ষে ঘোষণাটি স্কোপ করে, যা এটি খুব দরকারী করে তোলে। আপনি সেখানে কোনও নতুন ভেরিয়েবল ঘোষণা না করে শর্তযুক্তের ভিতরে নির্ধারণ করে দিলে - if ($foo = $bar)
এটি সতর্ক করবে, সতর্ক if (my $foo = $bar)
করবে , করবে না।
অন্য বিবৃতিতে অ্যাসাইনমেন্ট করা সাধারণত পর্যাপ্ত, তবে স্কোপিংয়ের সমস্যা আনতে পারে:
my $result = some_computation()
if ($result) {
say "We succeeded, and the result is $result";
}
else {
warn "Failed with $result";
}
# $result is still visible here - eek!
গোলং ত্রুটি যাচাইয়ের জন্য রিটার্ন মানগুলিতে খুব বেশি নির্ভর করে। সুতরাং এটি শর্তসাপেক্ষে একটি সূচনা বিবৃতি গ্রহণের অনুমতি দেয়:
if result, err := some_computation(); err != nil {
fmt.Printf("Failed with %d", result)
}
fmt.Printf("We succeeded, and the result is %d\n", result)
অন্যান্য ভাষাগুলি শর্তাধীন ভিতরে নন-বুলেটিয়ান এক্সপ্রেশনগুলি অস্বীকার করতে একটি টাইপ সিস্টেম ব্যবহার করে:
int foo;
if (foo = bar()) // Java does not like this
অবশ্যই এটি ব্যর্থ হয় যখন কোনও ফাংশন ব্যবহার করে যা বুলিয়ান দেয়।
আমরা এখন দুর্ঘটনাজনিত কার্যভারের বিরুদ্ধে রক্ষার জন্য বিভিন্ন প্রক্রিয়া দেখেছি:
- অভিব্যক্তি হিসাবে অ্যাসাইনমেন্টটি বাতিল করুন
- স্ট্যাটিক টাইপ চেকিং ব্যবহার করুন
- নিয়োগের অস্তিত্ব নেই, আমাদের কেবল
let
বাইন্ডিং রয়েছে
- কোনও সূচনা বিবরণীর অনুমতি দিন, অন্যথায় অ্যাসাইনমেন্টটি বাতিল করুন
- ঘোষণা ছাড়াই শর্তসাপেক্ষে অ্যাসাইনমেন্টটি বাতিল করুন
আমি তাদেরকে আরোহণের অগ্রাধিকারের ক্রম হিসাবে স্থান দিয়েছি - এক্সপ্রেশনগুলির অভ্যন্তর অ্যাসাইনমেন্টগুলি কার্যকর হতে পারে (এবং স্পষ্টত ঘোষণার বাক্য গঠন এবং একটি পৃথক নামযুক্ত যুক্তি সিনট্যাক্স ব্যবহার করে পাইথনের সমস্যাগুলি সমাধান করা সহজ)। তবে এগুলি অস্বীকার করা ঠিক আছে, কারণ একই প্রভাবের জন্য আরও অনেক বিকল্প রয়েছে।
সংক্ষিপ্ত কোডের চেয়ে বাগ-মুক্ত কোডটি গুরুত্বপূর্ণ।