PHP 8.1 ve Short Functions

PHP 8 kısa bir zaman önce 26 Kasım 2020'de birçok yeni özellikle birlikte geldi. Ancak PHP 8.1'de tüm bunlara ek olarak heyecan verici bir şey var.

PHP 7.4 ile birlikte piyasaya sürülen arrow fonksiyonlarını hatırlıyor musunuz? Aşağıdaki kod bloğundan görülebilir.

$numbers = array_map(function($value) use ($factor){
    return $value * $factor;
}, [1, 2, 3])

… Aşağıdakine eşdeğerdir.

$numbers = array_map(fn($value) => $value * $factor, [1, 2, 3]);

Bu, closure ifadelerini yalnızca tek bir ifadeyle daha düzenli ve kompakt yapmak içindi, tıpkı JavaScript'teki arrow fonksiyonları gibi .

Yukarıdakine benzer nedenlerden dolayı, ilgili RFC kabul edilirse PHP 8.1'e short function desteği gelebilir. Ayrıca Nuno Maduro da konuyla ilgili şöyle bir tweet atmıştı:

twitter.com/enunomaduro/status/131021457026..

Ei7QTywWsAIfVR9.jpg

Short Functions

Esasen, RFC , tek bir ifade ile short function işleminin rahatlığını adlandırılmış işlevlere getirmeye çalışır. Öyleyse, aşağıdaki fonksiyona sahipsek ...

function add(int $a, int $b): int 
{
    return $a + b;
}

Kısa fonksiyonları kullanarak bu, aşağıdaki hale getirilebiilir.

function add(int $a, int $b): int => $a + $b;

Anlayabileceğiniz gibi, short function sözdizimi daha basittir ve fonksionun yalnızca bir ifade içerdiği durumlarda fazladan görsel dağınıklığı ortadan kaldırır .

RFC'den orijinal haliyle alıntı yapıyorum, (wiki.php.net/rfc/short-functions)

Allowing functions to be written in a more expression-y way helps with conceptualizing a program as evaluating expressions, not statement steps.

Yani, fonksiyonları short function sözdizimini kullanarak yazmak, yalnızca tek bir ifade kullanarak fonksiyondan bir şeyleri çalıştırıp döndürüyorsanız, kodu daha doğal gösterebilir.

Ve son olarak, kısa işlevden herhangi bir ifadeyi döndürebileceğiniz gibi, eşleştirme ifadelerini de kısa işlevle birlikte kullanabilirsiniz .

function guessFruit(int $fruit): string => match ($fruit) {
    'apple' => 'fruit is apple',
    'orange' => 'fruit is orange',
    default => 'fruit is banana',
};

print guessFruit('apple') . PHP_EOL; // fruit is apple

Ki bunu PHP 8'de şöyle yazabilirsiniz.

function guessFruit(int $fruit): string
{
    return match ($fruit) {
        'apple' => 'fruit is apple',
        'orange' => 'fruit is orange',
        default => 'fruit is banana',
    }
}

print guessFruit('apple') . PHP_EOL; // fruit is apple

Oldukça güzel değil mi?

Kodunuz bol olsun.