Üçlü Operatör ?:

Üçlü operatörün genel şekli şu şekildedir:

ifade? ifade: ifade3

İlk işlenen - "ifade1" - için bir bool tipi ile sonuçlanacak her ifade kullanılabilir. Sonuç true (doğru) ise, operatör ikinci işlenen tarafından ayarlanır, yani "ifade2" çalıştırılır.

İlk işlenen false (yanlış) ise, üçüncü işlenen - "ifade3" çalıştırılır. İkinci ve üçüncü işlenenler (yani "ifade2" ve "ifade3") bir tip değerine dönüş yapmalıdır ve bu tip void tipi olmamalıdır. Koşullu operatörün çalıştırılmasının sonucu, ifade1'in sonucuna bağlı olarak ifade2 veya ifade3 olabilir.

//--- bir günlük aralık için, açılış ve kapanış fiyatları arasındaki farkı normalize et
double true_range = (High==Low)?0:(Close-Open)/(High-Low);

Bu giriş, şuna eşdeğerdir:

   double true_range;
   if(High==Low)true_range=0;               // High ve Low eşitse
   else true_range=(Close-Open)/(High-Low); // gerçek aralık boş değilse

 

Operatör Kullanım Kısıtlamaları #

"ifade1" değerine bağlı olarak, işlemci iki değerden birine dönüş yapmalıdır (ya "ifade2" ya da "ifade3"). Bu ifadeler için birkaç sınırlama vardır:

  1. Kullanıcı tanımlı tipi basit tip ile veya sayım ile karıştırmayın. NULL, işaretçi için kullanılabilir.
  2. Değerlerin tipi basitse, operatör en büyük tipe sahip olacaktır (bakınız Tip dönüşümü).
  3. Eğer değerlerden biri 'sayım' ise ve diğerinin de sayısal bir tipi varsa; sayım, int tipi ile değiştirilir ve ikinci kural uygulanır.
  4. İki değer de sayım ise, tipleri aynı olmalıdır. Operatör sayım tipinde olacaktır.

Kullanıcı tanımlı tipler (sınıflar veya yapılar) için kısıtlamalar:

  1. Tipler aynı olmalıdır veya bir diğerinden türetilmiş olmalıdır.
  2. Eğer tipler aynı (akraba) değilse, çocuk tip gizlice ebeveyne dönüştürülür. Yani operatör ebeveynin tipinde olur.
  3. Nesne ve işaretçiyi karıştırmayın – iki ifade de ya nesnedir ya da işaretçidir. NULL, işaretçi için kullanılabilir.

Not

Koşullu operatörü aşırı yüklenmiş fonksiyon için argüman olarak kullanırken dikkatli olun, çünkü bir koşullu operatörün sonucu, program derlendiği zaman tanımlanır. Sonuç tipi, "ifade1" ve "ifade2" tipleri arasından büyük olan şeklinde tanımlanır.

Örnek:

void func(double d) { Print("double argüman: ",d); }
void func(string s) { Print("string argüman: ",s); }
 
bool   Expression1=true;
double Expression2=M_PI;
string Expression3="3.1415926";
 
void OnStart()
  {
   func(Expression2);
   func(Expression3);
 
   func(Expression1?Expression2:Expression3);   // açık dizgi dönüşümü olduğunda uyar
   func(!Expression1?Expression2:Expression3);  // açık dizgi dönüşümü olduğunda uyar
  }
 
//   Sonuç:
//   double argüman: 3.141592653589793
//   string argüman: 3.1415926
//   string argüman: 3.141592653589793
//   string argüman: 3.1415926

Ayrıca Bakınız

Değişkenlerin Başlatılması, Değişkenlerin Görünürlük Alanları ve Ömürleri, Nesnelerin Yaratılması ve Silinmesi