Bu, hemen hemen diğer cevaplar tarafından kapsanmaktadır, ancak "bu bir ifade", bunun neden bu kadar yararlı olduğunu gerçekten açıklamıyor ...
C ++ ve C # gibi dillerde, bunları kullanarak yerel salt okunur alanları (bir yöntem gövdesi içinde) tanımlayabilirsiniz. Bu, geleneksel eğer / ise ifadesi ile mümkün değildir, çünkü salt okunur bir alanın değerinin bu tek ifade içinde atanması gerekir:
readonly int speed = (shiftKeyDown) ? 10 : 1;
şununla aynı değil:
readonly int speed;
if (shifKeyDown)
speed = 10; // error - can't assign to a readonly
else
speed = 1; // error
Benzer şekilde, diğer koda bir üçüncül ifade de gömebilirsiniz. Kaynak kodunu daha kompakt (ve bazı durumlarda daha okunabilir) yapmanın yanı sıra, üretilen makine kodunu daha kompakt ve verimli hale getirebilir:
MoveCar((shiftKeyDown) ? 10 : 1);
... aynı yöntemi iki kez çağırmaktan daha az kod üretebilir:
if (shiftKeyDown)
MoveCar(10);
else
MoveCar(1);
Tabii ki, aynı zamanda daha uygun ve özlü bir biçimdir (daha az yazma, daha az tekrarlama ve if / else içindeki kod parçalarını kopyalamak zorunda kalırsanız hata olasılığını azaltabilir). Bunun gibi temiz "yaygın kalıp" durumlarda:
object thing = (reference == null) ? null : reference.Thing;
... okumak / ayrıştırmak / anlamak (alıştıktan sonra) uzun soluklu if / else eşdeğerinden daha hızlıdır, bu nedenle daha hızlı 'grok' yapmanıza yardımcı olabilir.
Elbette, yararlı olması , her durumda kullanılacak en iyi şey olduğu anlamına gelmez . Bunu yalnızca anlamın açık olduğu (veya daha net hale getirildiği) kısa kod bitleri için kullanmanızı öneririm ?:
- eğer onu daha karmaşık bir kodda kullanırsanız veya üçlü operatörleri iç içe geçirirseniz, kodu okumayı korkunç derecede zorlaştırabilir .