25 éves születésnapot ünnepel a Visual Basic
2016-05-21T09:50:55+02:00
2016-05-28T20:50:32+02:00
2022-07-21T21:49:22+02:00
  • Nem vagyok makrófan de szerintem így a legjobban átlátható.
    #define RET_TRUE_IF_TRUE(a) if(a) { return true; } #define RET_TRUE_IF_FALSE(a) if(!a) { return true; } #define RET_FALSE_IF_FALSE(a) if(!a) { return false; } #define RET_FALSE_IF_TRUE(a) if(a) { return false; } RET_TRUE_IF_TRUE(someComplexCondition()); RET_TRUE_IF_TRUE(someOtherComplexCondition(myParameter)); RET_FALSE_IF_FALSE(someSimpleCondition(myParameter2)); RET_FALSE_IF_FALSE(myParameter3); return myParameter4 == nullptr ? false : true;
    Mutasd a teljes hozzászólást!
  • Például az újabb fejlesztésű Go-ban és Rust-ban nincs feltételes hármas operátor:

    Cserebe a rust if-je expression nem pedig statement, szoval ekvivalens a ternary operatorral csak mas a szintaxis.
    Mutasd a teljes hozzászólást!
  • Mondjuk a C stílusú ternary (hármas) operátort inkább a VB IIf() beépített függvényével vagy a VB.net If() operátorával lett volna célszerűbb összehasonlítani.

    **  ternary operátor: van amelyik nyelvben rövidre zárt, van amelyikben nem
    akarmi = valami ? ertek1 : ertek2

    ** VB függvény: nem rövidre zárt
    akarmi = IIf(valami, ertek1, ertek2)

    ** VB.net operátor: rövidre zárt
    akarmi = If(valami, ertek1, ertek2)

    "Aki programozást tanul vagy nincs gépagya az mondjuk előbb fogja megérteni és megjegyezni ..."
    Szerintem inkább arra gondolhattál, hogy a ternary operátor kilóg sorból, kicsit furcsa.
    Nem is miden nyelv vállalta be ezt az operátort.
    Például az újabb fejlesztésű Go-ban és Rust-ban nincs feltételes hármas operátor:
    ?: - Wikipedia, the free encyclopedia

    Nekem se tetszik a hármas az operátor, főleg akkor nem, amikor vagy a ternary kifejezés előtt vagy utána használunk még valamilyen műveletet.
    akarmi = 1 + (valami ? ertek1 : ertek2) + 2

    Ilyen esetben egy függvény szerintem szebb, biztonságosabb és megszokottabb volna.
    akarmi = 1 + IIf(valami, ertek1, ertek2) + 2
    Továbbá egymásba ágyazásnál az IIf függvények a kötelező zárójelezés miatt biztonságosabbak, mint a ternary operátoros kifejezések egymásba ágyazása az opcionális zárójelekkel.

    A függvénnyel viszont az a baj, hogy nem lehet rövidre zárt kiértékelésű.
    Mondjuk a VB.net If() operátora már rövidre zárt, viszont ezt a szintaxisa nem igazán fejezi ki, továbbá azt sem, hogy egyáltalán operátorral állunk szemben.
    akarmi = 1 + If(valami, ertek1, ertek2) + 2
    If Operator (Visual Basic)

    Szerintem egyébként az ilyen "inline" feltételes értékadás, inkább a boolean típus metódusaként volna a legkifejezőbb, legjobban olvashatóbb.
    Valahogy így:
    akarmi = valami.IIf(ertek1, ertek2)
    akarmi = 1 + valami.IIf(ertek1, ertek2) + 2

    A probléma viszont ezzel is ugyanaz, vagyis az IIf-nek mint metódusnak az argumentumai nem lehetnek rövidre zárt kiértékelésűek.
    Ok, legyen akkor valamilyen más szintaxis, ami arra utalna, hogy az IIf "metódus" argumentumai rövidre zártan értékelődnek ki:
    akarmi = valami.IIf(ertek1 : ertek2)
    De akkor ez mi?
    Operátornak nem operátor és metódusnak sem metódus.

    Szóval ide már "rövidre zárt kiértékelésű függvényre" volna szükség, ami nem igazán egy elterjedt dolog a programozás nyelvekben lehet, hogy okkal is, bár ebben az esetben a ternary operátor és az IIf() függvény helyett szerintem szebb volna.
    Szumma szummárum, én úgy látom, hogy nincs jelenleg "szép" megoldás inline feltételes műveletre egyik programozási nyelvben sem.
    Mutasd a teljes hozzászólást!
  • Ja, legyen szűz is meg rutinos is? ;)

    (Nyilván hipotetikus volt, de a példád átírva igazából "return ( a || b || c && d && e );" alakú, ami már nem annyira követhetetlen. Ilyen túlzárójelezések a valóságban is elő bírnak fordulni)
    Mutasd a teljes hozzászólást!
  • Hát még ha tudnád, hogy lehetőség szerint a többszöri return-t is kerülöm. 
    Mutasd a teljes hozzászólást!
  • //Biztonsági öveket becsatolni! Debuggolásra felkészülni! 

    if(someComplexCondition()==true) { return true; } else { if(someOtherComplexCondition(myParameter)==true) { return true; } else { if(someSimpleCondition(myParameter2)==false) { return false; } else { if(!myParameter3) { return false; } else { if(myParameter4 == null) { return false; } else { return true; } } } } }
    //Van egy kis gázgéza a WYSIWYG editorral :S (See != Get)
    Mutasd a teljes hozzászólást!

  • Megmondom az őszintét: Az olyan megoldásokat, mint 

    return ((someComplexCondition() || someOtherComplexCondition(myParameter)) || ((someSimpleCondition(myParameter2) && myParameter3) && (myParameter4 != null)));


    én is kerülni szoktam, mert idegesítően nehéz debuggolni.
    Mutasd a teljes hozzászólást!
  • Ezt a problemat egy [code contracts] szeru megoldassal kellene orvosolni. Természetesen amiatt, hogy az eredmény maximálisan innovatív és környezetterhelô legyen. 

    (Amugy ez nem meglepo: az emberek tulnyomo resze nem ismeri a boole algebrat, viszont olyan mondatokat már gyerekkora óta össze tud rakni, amiben szerepel a 'Ha' és az 'akkor', opcionalisan pedig a 'különben'...)
    Mutasd a teljes hozzászólást!


  • És mi a helyzet, ha egyik sem?

    Plain C/C++-ban nincs natív boolean típus csak egy int ami 0 esetén false, 1 esetén true, egyéb esetben pedig tovább fog gördülni a vezérlés. Egy assert-et még megérdemelt volna a kód.
    Mutasd a teljes hozzászólást!
  • Akinek ez gondot okoz, az jobb ha inkább nem programozást tanul.
    Mutasd a teljes hozzászólást!
  • if (Valami) { Akarmi = Ertek1 } else { Akarmi = Ertek2 }

    A ternális operátor az egyik legintuitívabb dolog a földön, gyakorlatilag egy kérdés, amire két lehetőség közül válaszolhatsz.
    Aki programozást tanul, és két perc alatt nem fogja fel, miről szól, az ne tanuljon programozást.
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Aki nem bírja megjegyezni a ternary operatort, az C-stílusú nyelvekben is nyugodtan használhat if-else-t, nincs neki megtiltva...
    Mutasd a teljes hozzászólást!
  • Szerintem még nem fog kihalni. Aki programozást tanul vagy nincs gépagya az mondjuk előbb fogja megérteni és megjegyezni ezt:

    If Valami Then Akarmi = Ertek1 Else Akarmi = Ertek2 End If
    mint ezt:

    Akarmi = ( Valami ? Ertek1 : Ertek2 )
    Mutasd a teljes hozzászólást!
  • Te aztán tudod, hogy hogyan kell egy szülinapost felköszönteni.
    Mutasd a teljes hozzászólást!
  • nem akar ez még kihalni?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd