.[ ČeskéHry.cz ].
jak zapisujete ternarni operator?

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 26. březen 2008, 12:04:34    Předmět: Odpovědět s citátem

Sice to přímo nesouvisí s IDE, ale nechci zakládat extra topic.
Mám otázku pro ty, co používají ternární operátor( ?: styl php a c++ ).
Jakým způsobem ho zapisujete, myšleno pro co nejlepší přehlednost kódu

zkoušel jsem zatím podobné patvary:
kód:

bez úprav:
$user = isset( $_SESSION ) ? $_SESSION[ 'user' ] : 'unknown' ;

první možnost
$user = isset( $_SESSION ) ?
            $_SESSION[ 'user' ] :
            'unknown' ;

další:
$user = isset( $_SESSION )
            ?
        $_SESSION[ 'user' ]
            :
        'unknown' ;

a dál:
$user = isset( $_SESSION )
            ?
            $_SESSION[ 'user' ]
            :
            'unknown' ;

či ještě hůř:
$user = isset( $_SESSION )
            ?
                $_SESSION[ 'user' ]
            :
                'unknown' ;


( představte si to se zvýrazněním syntaxu, oparátory tučně )

Nemáte někdo lepší nápad?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 26. březen 2008, 12:12:11    Předmět: Odpovědět s citátem

Pokud se to vejde na jeden řádek, tak používám tvar "bez úprav", jinak "první možnost". Ty další tvary mi přijdou strašně ukecaný a nepřehledný - to už by bylo imho přehlednější napsat if.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 26. březen 2008, 13:11:35    Předmět: Odpovědět s citátem

A já jen doplním Augiho pravidlo - v dnešních IDE se všechno vejde na jeden řádek, a tím se řídím Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 26. březen 2008, 13:35:41    Předmět: Odpovědět s citátem

pokud to vleze na jeden radek pak ternarni operator - jinak tam ternarni IMHO nema co delat a ma to byt IF aby to bylo visualne jasne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 26. březen 2008, 16:38:50    Předmět: Odpovědět s citátem

jj vsechno na jeden radek, treba :
kód:
out_URL = url.length() > 30 ? std::string("...") + ((url = url.substr(url.length()-27)), url.substr(url.find("/") == std::string::npos ? 0 : url.find("/"))) : url.c_str();
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Tringi



Založen: 28. 07. 2007
Příspěvky: 290

PříspěvekZaslal: 26. březen 2008, 18:52:54    Předmět: Odpovědět s citátem

Ternární operátor používám jen ve zjevných případech a pokud se díky němu kód jen trochu znepřehlední, pak silně zvažuju nahrazení ifem.
Řeším jím ale pouze výrazovité konstrukce, nikdy ne tok a logiku kódu.

Ternární operátor taky zvažuju, zpřehlední-li funkci, zde např ušetřím až 4 řádky Wink :
kód:
return p ? p->result : false;

Co se týče zalamování, pak asi takto:
kód:
return p ? p->result
         : false;

nebo, jsou-li názvy operandů delší, takto:
kód:
return pointer_to_something
           ? pointer_to_something->result
           : false;


Dále, nevím jak moc velká prasárna to je, ale někdy jej používám i takhle:
kód:
std::printf ("%u: %s\n",
             faults,
             faults ? "FAILED" : "passed");

_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 26. březen 2008, 20:03:39    Předmět: Odpovědět s citátem

Ternarny operator nepouzivam. If staci. (A namiesto loopov pouzivam if + goto, to je kvalitka Very Happy Jokin' Very Happy)
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 26. březen 2008, 20:22:06    Předmět: Odpovědět s citátem

if - elseif - ... - elseif - else, mělo by to být zarovnané do sloupců:
kód:
return x > y ? x+y :
       y > z ? y+z :
       z > x ? x+z :
               0;

Na jeden řádek pouze pokud je jenom ?:
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 26. březen 2008, 22:31:45    Předmět: Odpovědět s citátem

A to odsazujes 7 mezerami nebo mas v editoru nejake "inteligentni" odsazovani?
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 26. březen 2008, 23:15:16    Předmět: Odpovědět s citátem

Mezerami. (tabulátor se chová skoro jako tab, akorát dělá mezery místo \t)
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



Založen: 28. 07. 2007
Příspěvky: 162

PříspěvekZaslal: 27. březen 2008, 00:27:57    Předmět: Odpovědět s citátem

nijak casto ternarni operator nepouzivam. posledne jsem ho musel pouzit v makru ve skolnim ukolu, na odsazeni kaslat, hlavni je dobry komentar protoze neprehledny kod je porad neprehledny kod at tam das mezer kolik chces:
kód:

// (meze)? ((hodnota_bitu)? (vraceni 1) : (vraceni 0)) : (chyba, 1))
// operator carky vraci 1, protoze Error je typu void a GetBit musi nabyvat
// nejake hodnoty z pohledu kompilatoru
#define GetBit(p,index) \
((index>=0 && index<(sizeof(p)*8))? \
((p[index/(sizeof(unsigned long)*8)]&(1<<(index%(sizeof(unsigned long)*8))))?1:0) : \
(Error("Index %ld mimo rozsah 0..%ld\n", (long)index, (long)(sizeof(p)*8)), 1))
// end GetBit
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Al



Založen: 23. 10. 2007
Příspěvky: 196

PříspěvekZaslal: 31. březen 2008, 20:59:28    Předmět: Odpovědět s citátem

Já píšu na jeden řádek vše, co se do něj jen vejde... Cool
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Yossarian



Založen: 28. 07. 2007
Příspěvky: 274
Bydliště: Šalingrad

PříspěvekZaslal: 31. březen 2008, 23:49:58    Předmět: Odpovědět s citátem

ladik-BigBoss napsal:
nijak casto ternarni operator nepouzivam. posledne jsem ho musel pouzit v makru ve skolnim ukolu, na odsazeni kaslat, hlavni je dobry komentar protoze neprehledny kod je porad neprehledny kod at tam das mezer kolik chces:
kód:

// (meze)? ((hodnota_bitu)? (vraceni 1) : (vraceni 0)) : (chyba, 1))
// operator carky vraci 1, protoze Error je typu void a GetBit musi nabyvat
// nejake hodnoty z pohledu kompilatoru
#define GetBit(p,index) \
((index>=0 && index<(sizeof(p)*8))? \
((p[index/(sizeof(unsigned long)*8)]&(1<<(index%(sizeof(unsigned long)*8))))?1:0) : \
(Error("Index %ld mimo rozsah 0..%ld\n", (long)index, (long)(sizeof(p)*8)), 1))
// end GetBit


[OT] a ted to ukradnu, necham pristim prvakum do ijc a ty pujdes pred komisi, cha![/OT]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



Založen: 28. 07. 2007
Příspěvky: 162

PříspěvekZaslal: 1. duben 2008, 08:42:39    Předmět: Odpovědět s citátem

[ot] Ha! a ja ti pak nakopu prdel tak ze te doma nepoznaj! [/ot]
navic takovy snippet by me asi pred disciplinarku nedostal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna