Walrus umsebenzisi kwi PHP

Ngo-Okthobha ka-2019, iPython 3.8 yazisa umqhubi weWalrus (:=) nge PEP 572 -kwaye ke ngoko yavusa eyona mpikiswano inkulu kwimbali yolwimi lwenkqubo. Ingxoxo yayikrakra kangangokuba umqambi wePython UGuido van Rossum ngoJulayi 2018 - nangaphambi kokukhululwa - isikhundla sakhe njengeBDFL (Uzwilakhe onenceba kuBomi). Ukusukela ekuqaleni kuka-2019, iPython endaweni yoko ilawulwa liBhunga eliLawulayo elinyuliweyo.


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

Ukuqhekeka kolawulo kwavela ngokukhawuleza emva kwengxoxo kaWalrus-imeko enqabileyo apho uphawu olulodwa lolwimi lube nemiphumo yesakhiwo. Kwingxelo yakhe, uVan Rossum wachaza: "I-straw yokugqibela yayiyiSindululo sokuphucula i-Python ephikisana kakhulu. Emva kokuba ndiyamkele, abantu bathatha i-social media njenge-Twitter kwaye bathetha izinto ezibuhlungu kum. "

Waqhubeka wathi: "Ngoku ekubeni i-PEP 572 iphelile, andifuni kuphinda ndilwe nzima kangaka nge-PEP kwaye ndifumanise ukuba abantu abaninzi bayazonda izigqibo zam. Ndifuna ukuzikhupha ngokupheleleyo kwinkqubo yokwenza izigqibo." Ukugxekwa akuveli kuphela kuluntu olubanzi, kodwa nakubaphuhlisi abangundoqo.

Baye baxoxa ukuba umqhubi uyaphikisana nemigaqo yePython esisiseko evela kwiZen yePython -ingakumbi ukhetho lokulula kunobunzima. Emva kweminyaka ephantse ibe ngamashumi amathathu njengomyili wolwimi ongenakuphikiswa, oku kwaphawula ukuphela kwexesha. Kodwa ngelixa uPython kwafuneka azise umsebenzisi omtsha weWalrus, ekwahlulahlula uluntu kulo msebenzi, umbuzo uvela: Ezinye iilwimi ziziphatha njani iikhonsepthi ezifanayo?

Umsebenzisi wePython := (ISabelo seNgcaciso ye-Assignment alias "Walrus") ayikho kwi-PHP - kuba ayifuneki. Kwi-PHP, umqhubi wesabelo = rhoqo Ingxelo kunye nentetha ngaxeshanye: Isabelo sibuyisela ixabiso elabelweyo. Kungenxa yoko le nto iipateni ze-idiomatic ezifana ne "assign-and-test" zisebenza kuyo if-imiqathango ngaphandle kophawu lolwimi lwabo.

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() wabela kwaye uvavanya kwicala lasekunene. Ukuba oku "yinyani", ungenisa i if-Block. Imvelaphi: KwiPython, := (PEP 572) kuba izabelo ezilula aziyontetho. Kwi-PHP, oku kuye kwahluka, ngoko akukho mfuneko ilinganayo. Izinto ezimbini zihlala zikhokelela kwiimpazamo.: = (Isabelo) sinomphambili osezantsi kunabasebenzisi abaninzi bobudlelwane; izibiyeli zimisela uvandlakanyo.

Kumabinzana antsokothileyo, kufuneka usoloko usebenzisa izibiyeli ukwandisa ukufundeka nokucaca. ?? inoyayo, ayibalulekanga kangako. Oku kuchaza izinto ezothusayo kumabinzana afana $x ?? null === null. Ngaphandle kwezibiyeli, kuqala null === null ivavanyiwe. Kungcono ukuhlala ubeka isibiyeli ngokucacileyo: ($x ?? null) === null. $a ikhona kwakhona ngaphandle if-Iibhloko – mhlawumbi zinexabiso elingeyonyani.

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

Ngoko kucacile ukuba === 'bar' isetyenziswa kwixabiso elabelweyo. Izibiyeli zibalulekile apha ukuze zifundeke kwaye zibekwe phambili. Ngokwesiqhelo, le pateni inqanda iifowuni eziphindaphindayo ezingeyomfuneko (umzekelo, zomakhi wombuzo) ngokugcina isiphumo sombuzo kwaye emva koko sijonge. Kwizicelo ezinemveliso, ezinje ngeeprojekthi ezisekwe kwiLaravel, le pateni ilandelayo inokujongwa rhoqo.:

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

&& i-short-circuiting: Indawo ekunene ivavanywa kuphela ukuba indawo yasekhohlo inyanisekile. Ngokwabela ingxelo enyukayo, uyakuphepha ukunika ingxelo ngaphandle kwengxelo. Ingaba oku kukwenza okulungileyo kuxhomekeke kwikhowudi yeqela lakho kunye nezixhobo zokuhlalutya; ngokwemantiki, ichanekile. Ubuncinci, kuya kufuneka uyazi ukuba ikhowudi yenza ntoni ukuba udibana nayo endle.

I-PHP ayifuni "umqhubi weWalrus" kuba izabelo sele zithetha. Oku kwenza iipateni zezaci ezifana no-"assign-and-test" zibekho - zisebenza kwaye zimfutshane. Kwangaxeshanye, iimfuno zokuziphatha ziyanda: izibiyeli, uthelekiso olungqongqo, ulwazi ngenyaniso/ubuxoki, kunye nemigaqo yeqela ecacileyo iyanyanzeleka. Abo balandela ezi zikhokelo bavuna izibonelelo zembono kaWalrus ngaphandle kokufuna uphawu olongezelelweyo lolwimi.

Emva