OCA Java imtahan mövzuları

Ternary Operator

Sintaksis:

  • booleanExpression ? expression1 : expression2

Birinci tərəf mütləq boolean ifadə olmalıdır, ikinci və üçüncü tərəflər isə mənimsədilən dəyərin tipinə uyğun olmalıdır. Short-circuit operatorlarda olduğu kimi ternary operatorda da runtime vaxtı “?”-dan sonra ancaq iki şərtdən biri icra edilir.

int y = 1;
int z = 1;
final int x = y < 10 ? y++ : z++;
System.out.println(y + "," + z);      // output: 2,1

Aşağıda birinci sətirdə istənilən halda ancaq true şərtinin yerinə yetirilməsinə baxmayaraq hər iki dəyər mənimsədilən dəyişənin tipinə uyğun olmalıdır, ? simvolundan sağdakı dəyərlərin bir-biri ilə eyni tipdə olması isə tələb deyil:

int x = 6 > 5 ? 6 : "5";   // does not compile
System.out.println(6 > 5 ? 6 : "5");  // output is 6

Ternary operatorlarda operatorların yerinə yetirilmə ardıcıllığına diqqət etmək lazımdır. Bir nümunəyə baxaq:

String a = "a";
String b = "b";
final String letter = 213 > 321 ? a : b = "c" ;  // DOES NOT COMPILE

Baş verən xəta operatorların icra ardıcıllığından qaynaqlanır. Assignment operator (=) ternary operatordan (?:) sonra icra olunur. Daha aydın olması üçün sonuncu sətri bir az formatlaşdırılmış şəklə salaq:

final String letter = (213 > 321 ? a : b) = "c" ;
final String letter = "b" = "c" ;

Dəyəri dəyərə mənimsətmək mümkün olmadığından kod compile olunmur. Əgər "b" əvəzinə b olsa və yaxud ilk kod nümunəsindəki (b = "c") mötərizə içində yazılsa kod compile olunar:

final String letter = b = "c" ;
final String letter = 213 > 321 ? a : (b = "c");

 

void tipində metodların ternary operator ilə istifadəsinə icazə verilmir:

class TestTernaryOperator {

    public static void main(String[] args) {
        System.out.println(6>5 ? return1() : return2());   // output: I am String      
        System.out.println(6>5 ? void1() : void2());       // does NOT compile
    }
    
    static String return1(){ return "I am String"; }
    static int return2(){ return 7; }
    
    static void void1(){ System.out.println("I am void 1"); }
    static void void2(){ System.out.println("I am void 2"); }
}

 

[topics lang=az]

About the author

Mushfiq Mammadov

Leave a Comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.