នៅក្នុងខែតុលា ឆ្នាំ 2019 Python 3.8 បានណែនាំប្រតិបត្តិករ Walrus (:=) តាមរយៈ PEP 572 - ហើយដោយហេតុនេះ បានបង្កឱ្យមានភាពចម្រូងចម្រាសដ៏ធំបំផុតមួយនៅក្នុងប្រវត្តិសាស្ត្រនៃភាសាសរសេរកម្មវិធី។ ការជជែកវែកញែកគឺជូរចត់ណាស់ដែលអ្នកបង្កើត Python លោក Guido van Rossum នៅខែកក្កដាឆ្នាំ 2018 - សូម្បីតែមុនពេលការចេញផ្សាយ - តំណែងរបស់គាត់ជា BDFL (សប្បុរសជនផ្តាច់ការសម្រាប់ជីវិត) ចាប់តាំងពីដើមឆ្នាំ 2019 មក Python ត្រូវបានគ្រប់គ្រងដោយក្រុមប្រឹក្សាដឹកនាំដែលជាប់ឆ្នោតជំនួសវិញ។
if (n := len(items)) > 10:
print(f"List is too long ({n} elements)")
ការប្រេះឆាផ្នែកអភិបាលកិច្ចបានកើតឡើងភ្លាមៗបន្ទាប់ពីការពិភាក្សារបស់ Walrus ដែលជាករណីដ៏កម្រដែលលក្ខណៈពិសេសភាសាតែមួយមានផលវិបាកជារចនាសម្ព័ន្ធ។ នៅក្នុងសេចក្តីថ្លែងការណ៍របស់គាត់ លោក van Rossum បានពន្យល់ថា "ចំបើងចុងក្រោយគឺជាសំណើកែលម្អ Python ដ៏ចម្រូងចម្រាសមួយ។ បន្ទាប់ពីខ្ញុំបានទទួលយកវា មនុស្សបានចូលទៅក្នុងប្រព័ន្ធផ្សព្វផ្សាយសង្គមដូចជា Twitter ហើយនិយាយអ្វីដែលធ្វើឱ្យខ្ញុំឈឺចាប់ផ្ទាល់ខ្លួន" ។
គាត់បានបន្តទៀតថា "ឥឡូវនេះ PEP 572 ត្រូវបានបញ្ចប់ ខ្ញុំមិនដែលចង់មានការតស៊ូខ្លាំងសម្រាប់ PEP ម្តងទៀតទេ ហើយឃើញថាមនុស្សជាច្រើនស្អប់ការសម្រេចចិត្តរបស់ខ្ញុំ។ ខ្ញុំចង់ដកខ្លួនចេញពីដំណើរការធ្វើសេចក្តីសម្រេចទាំងស្រុង"។ ការរិះគន់នេះមិនត្រឹមតែមកពីសហគមន៍ទូលំទូលាយប៉ុណ្ណោះទេ ប៉ុន្តែក៏មកពីអ្នកអភិវឌ្ឍន៍ស្នូលផងដែរ។
ពួកគេបានប្រកែកថាប្រតិបត្តិករបានជំទាស់នឹងគោលការណ៍ Python ជាមូលដ្ឋានពី Zen of Python ជាពិសេសចំណង់ចំណូលចិត្តសម្រាប់ភាពសាមញ្ញជាងភាពស្មុគស្មាញ។ បន្ទាប់ពីជិតបីទសវត្សរ៍ក្នុងនាមជាអ្នករចនាភាសាដែលគ្មានជម្លោះ នេះជាការបញ្ចប់នៃយុគសម័យមួយ។ ប៉ុន្តែខណៈពេលដែល Python ត្រូវណែនាំប្រតិបត្តិករ Walrus ថ្មីដោយបែងចែកសហគមន៍របស់ខ្លួននៅក្នុងដំណើរការនោះ សំណួរកើតឡើង: តើភាសាផ្សេងទៀតដោះស្រាយគោលគំនិតស្រដៀងគ្នាដោយរបៀបណា?
ប្រតិបត្តិករ Python := (ឈ្មោះហៅក្រៅ Assignment Expression "Walrus") មិនមាននៅក្នុង PHP ទេ ដោយសារវាមិនត្រូវការ។ នៅក្នុង PHP, assignment operator = ជានិច្ច សេចក្តីថ្លែងការណ៍និងការបញ្ចេញមតិក្នុងពេលតែមួយ: កិច្ចការមួយត្រឡប់តម្លៃដែលបានកំណត់។ នេះពិតជាមូលហេតុដែលលំនាំ idiomatic ដូចជា "assign-and-test" ដំណើរការ 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- ប្លុក។ ផ្ទៃខាងក្រោយ៖ នៅក្នុង Python, := (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' ត្រូវបានអនុវត្តទៅតម្លៃដែលបានកំណត់។ តង្កៀបមានសារៈសំខាន់នៅទីនេះសម្រាប់លទ្ធភាពអាន និងអាទិភាព។ នៅក្នុងការអនុវត្ត គំរូនេះជៀសវាងការហៅស្ទួនដែលមិនចាំបាច់ (ឧ. នៃកម្មវិធីបង្កើតសំណួរ) ដោយរក្សាទុកលទ្ធផលសំណួរហើយបន្ទាប់មកពិនិត្យមើលវា។ នៅក្នុងកម្មវិធីដែលមានផលិតភាព ដូចជាគម្រោងដែលមានមូលដ្ឋានលើ Laravel គំរូខាងក្រោមអាចត្រូវបានគេសង្កេតឃើញញឹកញាប់ជាងមុន។:
if ( ($foo = Foo::where('foo', 'bar')) && $foo->count() > 0 ) {
dd($foo->get());
}
&& គឺ short-circuiting: ផ្នែកខាងស្តាំត្រូវបានវាយតម្លៃតែប៉ុណ្ណោះប្រសិនបើផ្នែកខាងឆ្វេងគឺជាការពិត។ តាមរយៈការចាត់តាំងសេចក្តីថ្លែងការណ៍ខាងលើ អ្នកជៀសវាងការផ្តល់សេចក្តីថ្លែងការណ៍នៅខាងក្រៅ if statement។ ថាតើនេះជាការអនុវត្តល្អឬអត់ អាស្រ័យលើកូដ និងឧបករណ៍វិភាគរបស់ក្រុមអ្នក តាមន័យត្រង់ វាត្រឹមត្រូវ។ យ៉ាងហោចណាស់ អ្នកគួរតែដឹងពីអ្វីដែលកូដធ្វើ ប្រសិនបើអ្នកជួបប្រទះវានៅក្នុងព្រៃ។
PHP មិនត្រូវការ "Walrus operator" ទេ ពីព្រោះ assignments គឺជា expressions រួចហើយ។ នេះធ្វើឱ្យលំនាំ idiomatic ដូចជា "assign-and-test" អាចធ្វើទៅបាន - អនុវត្ត និងសង្ខេប។ ក្នុងពេលជាមួយគ្នានេះ ការទាមទារលើការបង្កើនវិន័យ៖ វង់ក្រចក ការប្រៀបធៀបដ៏តឹងរឹង ការយល់ដឹងអំពីការពិត/មិនពិត និងអនុសញ្ញាក្រុមច្បាស់លាស់គឺជាកាតព្វកិច្ច។ អ្នកដែលធ្វើតាមការណែនាំទាំងនេះ ទទួលបានអត្ថប្រយោជន៍នៃគំនិត Walrus ដោយមិនចាំបាច់មានលក្ខណៈពិសេសភាសាបន្ថែម។