পিএইচপি-তে ওয়ালরাস অপারেটর

২০১৯ সালের অক্টোবরে, পাইথন ৩.৮ ওয়ালরাস অপারেটর চালু করে (:=) এর মাধ্যমে পিইপি ৫৭২ - এবং এর ফলে প্রোগ্রামিং ভাষার ইতিহাসে সবচেয়ে বড় বিতর্কগুলির মধ্যে একটির সূত্রপাত হয়। বিতর্কটি এতটাই তিক্ত ছিল যে পাইথনের উদ্ভাবক গুইডো ভ্যান রসাম জুলাই ২০১৮ সালে - মুক্তির আগেই - বিডিএফএল হিসেবে তার পদ (জীবনের জন্য কল্যাণকর একনায়ক)। ২০১৯ সালের শুরু থেকে, পাইথন একটি নির্বাচিত স্টিয়ারিং কাউন্সিল দ্বারা পরিচালিত হচ্ছে।


if (n := len(items)) > 10:
    print(f"List is too long ({n} elements)")

ওয়ালরাস আলোচনার পরপরই শাসনব্যবস্থায় বিভেদ দেখা দেয় - এটি একটি বিরল ঘটনা যেখানে একক ভাষার বৈশিষ্ট্যের কাঠামোগত পরিণতি হয়েছিল। তার বিবৃতিতে, ভ্যান রসাম ব্যাখ্যা করেছেন: "চূড়ান্ত খড় ছিল একটি অত্যন্ত বিতর্কিত পাইথন বর্ধন প্রস্তাব। আমি এটি গ্রহণ করার পর, লোকেরা টুইটারের মতো সামাজিক যোগাযোগ মাধ্যমে এমন কিছু বলেছিল যা আমাকে ব্যক্তিগতভাবে আঘাত করেছিল।"

তিনি আরও বলেন: "এখন যেহেতু PEP 572 শেষ হয়ে গেছে, আমি আর কখনও PEP-এর জন্য এত কঠিন লড়াই করতে চাই না এবং দেখতে চাই না যে এত লোক আমার সিদ্ধান্তগুলিকে ঘৃণা করে। আমি সিদ্ধান্ত গ্রহণের প্রক্রিয়া থেকে নিজেকে সম্পূর্ণরূপে সরিয়ে নিতে চাই।" সমালোচনা কেবল বৃহত্তর সম্প্রদায়ের কাছ থেকে নয়, মূল বিকাশকারীদের কাছ থেকেও এসেছে।

তারা যুক্তি দিয়েছিলেন যে অপারেটরটি পাইথনের জেন থেকে প্রাপ্ত মৌলিক পাইথন নীতিগুলির বিরোধিতা করেছে - বিশেষ করে জটিলতার চেয়ে সরলতার পছন্দ। প্রায় তিন দশক ধরে অবিসংবাদিত ভাষা ডিজাইনার হিসেবে কাজ করার পর, এটি একটি যুগের সমাপ্তি চিহ্নিত করেছে। কিন্তু পাইথনকে যখন একটি নতুন ওয়ালরাস অপারেটর প্রবর্তন করতে হয়েছিল, যা তার সম্প্রদায়কে বিভক্ত করে, তখন প্রশ্ন ওঠে: অন্যান্য ভাষাগুলি কীভাবে একই ধরণের ধারণাগুলি পরিচালনা করে?

পাইথন অপারেটর := (অ্যাসাইনমেন্ট এক্সপ্রেশন ওরফে "ওয়ালরাস") পিএইচপি-তে বিদ্যমান নেই - কারণ এটির প্রয়োজন নেই। পিএইচপি-তে, অ্যাসাইনমেন্ট অপারেটর = সর্বদা একই সাথে বিবৃতি এবং অভিব্যক্তি: একটি অ্যাসাইনমেন্ট নির্ধারিত মান প্রদান করে। ঠিক এই কারণেই "অ্যাসাইন-এন্ড-টেস্ট" এর মতো বাগধারার ধরণগুলি কাজ করে if- নিজস্ব ভাষা বৈশিষ্ট্য ছাড়াই শর্ত।

function get_some_field() {
    return 'foo';
}
if ($a = get_some_field()) {
    echo $a; // foo
}
// Hinweis: $a ist *gesetzt*, selbst wenn die Bedingung falsy wäre.

$a = get_some_field() ডান দিকে বরাদ্দ এবং মূল্যায়ন করে। যদি এটি "সত্য" হয়, তাহলে আপনি প্রবেশ করুন if-ব্লক। পটভূমি: পাইথনে, := (PEP 572) কারণ সহজ অ্যাসাইনমেন্টগুলি এক্সপ্রেশন নয়। PHP-তে, এটি সর্বদা ভিন্ন ছিল, তাই কোনও সমতুল্য প্রয়োজন নেই। দুটি জিনিস প্রায়শই বাগের দিকে পরিচালিত করে।: = (অ্যাসাইনমেন্ট) বেশিরভাগ রিলেশনাল অপারেটরের তুলনায় কম অগ্রাধিকার পায়; বন্ধনী মূল্যায়ন নির্ধারণ করে।

আরও জটিল অভিব্যক্তিতে, পঠনযোগ্যতা এবং স্পষ্টতা বৃদ্ধির জন্য আপনার সর্বদা বন্ধনী ব্যবহার করা উচিত। ?? এর নিজস্ব, বরং কম অগ্রাধিকার আছে। এটি এমন অভিব্যক্তিতে বিস্ময় ব্যাখ্যা করে যেমন $x ?? null === null. প্রথম বন্ধনী ছাড়া, null === null মূল্যায়ন করা হয়েছে। সর্বদা স্পষ্টভাবে বন্ধনীতে রাখা ভালো: ($x ?? null) === null. $a এর বাইরেও বিদ্যমান if-ব্লক - সম্ভবত একটি মিথ্যা মান সহ।

function get_some_field() {
    return 'bar';
}
if ( ($a = get_some_field()) === 'bar' ) {
    echo $a; // bar
}

তাই এটা স্পষ্ট যে === 'bar' নির্ধারিত মানের উপর প্রয়োগ করা হয়। পঠনযোগ্যতা এবং অগ্রাধিকারের জন্য এখানে বন্ধনী গুরুত্বপূর্ণ। বাস্তবে, এই প্যাটার্নটি কোয়েরি ফলাফল সংরক্ষণ করে এবং তারপর এটি পরীক্ষা করে অপ্রয়োজনীয় ডুপ্লিকেট কল (যেমন, কোয়েরি নির্মাতার) এড়ায়। লারাভেল-ভিত্তিক প্রকল্পের মতো উৎপাদনশীল অ্যাপ্লিকেশনগুলিতে, নিম্নলিখিত প্যাটার্নটি আরও ঘন ঘন পর্যবেক্ষণ করা যেতে পারে।:

if ( ($foo = Foo::where('foo', 'bar')) && $foo->count() > 0 ) {
    dd($foo->get());
}

&& শর্ট-সার্কিট হচ্ছে: ডান অংশটি কেবল তখনই মূল্যায়ন করা হয় যদি বাম অংশটি সত্য হয়। স্টেটমেন্টটি আপস্ট্রিম অ্যাসাইন করার মাধ্যমে, আপনি if স্টেটমেন্টের বাইরে স্টেটমেন্টটি অ্যাসাইন করা এড়াতে পারবেন। এটি ভাল অনুশীলন কিনা তা আপনার দলের কোড এবং বিশ্লেষণ সরঞ্জামের উপর নির্ভর করে; শব্দার্থগতভাবে, এটি সঠিক। অন্তত, আপনার জানা উচিত যে কোডটি যদি আপনি অপ্রত্যাশিতভাবে এটির মুখোমুখি হন তবে কী করে।

পিএইচপি-তে "ওয়ালরাস অপারেটর" এর প্রয়োজন হয় না কারণ অ্যাসাইনমেন্টগুলি ইতিমধ্যেই এক্সপ্রেশন। এটি "অ্যাসাইন-এন্ড-টেস্ট" এর মতো বাগধারাগত প্যাটার্নগুলিকে সম্ভব করে তোলে - পারফর্ম্যান্ট এবং সংক্ষিপ্ত। একই সময়ে, শৃঙ্খলার চাহিদা বৃদ্ধি পায়: বন্ধনী, কঠোর তুলনা, সত্য/মিথ্যা সম্পর্কে সচেতনতা এবং স্পষ্ট দলগত নিয়মাবলী বাধ্যতামূলক। যারা এই নির্দেশিকাগুলি অনুসরণ করে তারা অতিরিক্ত ভাষা বৈশিষ্ট্যের প্রয়োজন ছাড়াই ওয়ালরাস ধারণার সুবিধা উপভোগ করে।

পেছনে