Eğer üçlü operatör için kullandığınız kodlama tarzı?

14 Cevap php

Kısa eğer ben tek çizgi içinde tutmak. Son zamanlarda artık bu stili kullanarak veya üçlü operatör ifadeleri iç içe oldum. A yapmacık bir örnek:

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';

Şahsen hangisini kullanmak tarzı, ya da bulmak en okunabilir?

Edit: (on when to use ternary-operator)

Ben genellikle fazla 2 düzeyleri derin üçlü operatör kullanmaktan kaçının. Ben 2 seviyesinin üzerinde 2 düzeyleri derin üçlü operatörü tercih eğiliminde if-else, ben PHP şablon komut değişkenleri yankılanan olduğumda.

14 Cevap

Üçlü operatör kaçınılması gereken genel olarak, ancak bu şekilde oldukça okunaklı olabilir:

  result = (foo == bar)  ? result1 :
           (foo == baz)  ? result2 :
           (foo == qux)  ? result3 :
           (foo == quux) ? result4 : 
                           fail_result;

Bu şekilde, koşul ve sonuç aynı hat üzerinde bir arada tutulur ve aşağı sıyırmak ve neler olup bittiğini anlamak oldukça kolaydır.

Ben iç içe koşulları yazmak için üçlü operatörü kullanmamaya çalışın. Bu okunabilirliği meydan okuyan ve bir koşullu kullanarak üzerinde hiçbir ekstra değer sağlar.

Tek bir satıra sığabilecek, ve bunun ne anlama geldiğini, kristal berraklığında sadece varsa, bunu kullanmak:

$value = ($a < 0) ? 'minus' : 'plus';

O tek satıra sığacak eğer Şahsen ben sadece üçlü operatörü kullanabilirsiniz. Bu span gerekiyorsa, o eski güzel zamanı

if else if else

PHP iç içe üçlü operatörler farklı davranır.

This syntax passes all the following tests. Based on http://deadlytechnology.com/web-development-tips/php-ternary-syntax/

$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');

.

Bkz: http://au.php.net/ternary

Aşağıdaki PHP neden çalışmıyor Örnek 3 "belirgin olmayan Üçlü Davranış" açıklıyor.

$x = 1;
$y = 2;
$z = 3;   
$myvar = ($x == $y) 
       ? "foo" 
       : ($x == $z) 
         ? "bar" 
         : "none";  
$myvar == 'none'; // Good

$x = 1;
$y = 2;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Good

$x = 1;
$y = 1;
$z = 3;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

$x = 1;
$y = 1;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

üçlü operatörler basit tablolar halinde yazmak için kısa etkili yolu vardır. Bunlar iç içe ya da okumak zor olmamalıdır. Unutmayın: Bir kez yazılımı yazmak ama 100 kere okundu edilir. Bu yazma daha okumak daha kolay olmalıdır.

Bir tarzı Ben söz edilmemiştir beri ben götürüyorum sometimes kullanımı, bu gibi:

$result = ($x == y)
        ? "foo"
        : "bar";

.. Ama genellikle sadece tek bir satırda tüm koyarak eğer çok uzun yapar. Ben = ? : Tüm satır yukarı olan bu kıvrımlara görünmesini sağlar bulabilirsiniz.

(A == b): Ben parantez içinde durumu içine eğilimindedir? 1: 0

Ben ortak görüşüne karşı çıkıyorum edeceğiz. YıIdızlarımı koşullu operatör tarzı ile İmran gibiyim. Bir satırda temiz bir şekilde uyuyor, ben tek bir satırda tutmak. Tek bir satırda temiz uymuyorsa, bunu kırmak yapmak, ama sadece tek bir sekmesini kullanabilirsiniz (4 alanlarda; VS sekmeler için boşluk eklemek için ayarlanmış) girinti için. Çok zaman koşullu operatör içeriksel daha mantıklı çünkü, else - Ben hemen if atlamak yok. (Bağlamsal olarak mantıklı değil, ancak, ben sadece bunu kullanmıyorum.)

Ayrıca, ben yuva koşullu operatörleri yok. Bu noktada, ben çok zor okumak bulurum, ve daha ayrıntılı if gitmek zamanı - else tarzı.

Üçlü koşullu kod temiz ve daha şık yapmak ve en önemlisi, siz doğru şeyler vurgu yardımcı olmak ve kendini tekrar önleyebilirsiniz. Bunları kullanarak düşünün, ancak bunu yaparak kod az okunabilir yapmazlar. VB.NET in:

'before refactoring 
If x = 0 Then                    ' If-Then-Else puts emphasis on flow control
    label = "None"
Else
    label = Foo.getLabel(x)      '  If-Then-Else forces repeat of assignment line
End If

'after refactoring    
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment

"Daha az okunabilir" Not "Bunu görmeye alışık değilim" aynı şey değildir.

Ben bunu kullanmıyorum. O zaman küçük bir kaynak daha verimli derlenmiş kod == bu beklenti ile kaynak kodunda yer ve yazmaya kurtarmaya çalışıyor gibi bana kokuyordu.

Ben hiç okunabilir bulmuyorum, ama ben sadece bunu kullanmak asla çünkü çok olduğunu.

Ben .. else if çok daha okunabilir bulmak gibi tüm üçlü operatörü kullanmak için değil eğilimindedir.

İmran, güzelce bu biçimlendirilmiş. Ancak, üçlü operatör size yuva ikiden fazla okunmaz almak eğilimindedir yok. bir if-else blok size anlaşılır yuvalama fazladan bir verebilir. Bunun ötesinde, bir fonksiyon veya tablo güdümlü programlama kullanabilirsiniz.

Ben şahsen sadece (örneğin java) bir değişkenin bir atama için kullanabilirsiniz:

String var = (obj == null) ? "not set" : obj.toString();

ve (diğer örnek) gibi boş parametre izin vermez işlevini kullanırken:

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);

"Yapmacık örnek" Ben (veya ne olursa olsun yukarıdaki satırda nerede dayalı, sol kenardan değil girintili olacağını dışında ben bunu girinti nasıl olduğunu.

Üçlü eleştiride için - okunabilirliği noktasıdır. Eğer daha okunabilir kod yapar sanmıyorum, bunu kullanmıyorum. Ama aksine zaman en azından bazı durum olarak görüyorum.