Īsslēguma loģiskie operatori

Last modified by superadmin on 2018-01-12 20:38

Īsslēguma loģiskie operatori

Būla izteiksmju izskaitļošanā bieži pietiek zināt tikai vienu argumentu. Tā kā false && x ir false un true || x ir true neatkarīgi no tā, kāds ir x, tad Javā šajās situācijās apakšizteiksmi x vispār nerēķina. Šādai situācijai ir praktiski pielietojumi programmēšanā, piemēram,
// funkcija atgriež stringa pirmo burtu vai arī tukšumu, ja stringam nav pirmā burta
int pirmais_burts(String s) {
    if (s == null || s.equals("")) return ' ';
return s.charAt(0);
}
Šajā piemērā metodes izsaukumss.equals("") beigtos beediigi tajos gadiijumos, kad s ir null. Par laimi, saīsinātās rēķināšanas ("short-circuit") dēļ, šis izsaukums nekad nenotiek tad, kad s ir null. Pievērsiet uzmanību arī tam, ka null (nedefinēts) strings un tukšs strings ir divas dažādas lietas un par šiem gadījumiem ir jādomā atsevišķi. Apskatīsim citu piemēru:
int i = 1;
int j = i++;
if ((j+2 > ++i) && ((i += j) <= 4))) {
    i += 4;
}
System.out.println("i=" + i);
Ja kāds nodomātu, ka loģisko konjunkciju 3. rindiņā var izrēķināt tikai pēc tam, kad ir izrēķinātas abas apakšizteiksmes, tad sanāktu, ka pēc izteiksmes (j+2 > ++i) izrēķināšanas i kļūst vienāds ar 3, bet pēc izteiksmes ((i += j) <= 4) izrēķināšanas i ir jau 4. Tomēr patiesībā šī pēdējā izteiksme nemaz netiek rēķināta. Tāpēc programma izdrukā "i=3".
Tags:
Created by Kalvis Apsītis on 2008-05-04 16:40
    
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 6.4 - Documentation