Tuli tässä mieleen. Että vaikka itse koodailenkin Delphillä työkseni ja tykkään koodata Delphillä (Pascalilla), niin mitä ärsyttävyyksiä tässä kielessä on?
Mulla tulee mieleen semmoinen hankaluus, että miksi muuttujat pitää määrittää metodin alussa?
procedure xxx;
var
x, y, z: tyyppi;
begin
..
end;
Miksi ei voisi määrittää C tapaan missä tahansa näitä muuttujia, kuten vaikka
for var I := 0 to List.Count-1 do
begin
var b := 1974 I;
end;
Olen joskus huomannut, että ainaskin joskus Delphi 2006 yrittää arvata ja lisätä metodin alkuun jonkun muuttujan, mutta ei se oikein toimi :/
Pascalin ärsyttävyyksiä..
30
796
Vastaukset
- ap..
Unohtui heti sitten tyypin määritys noista, heh heh! Eli uusiksi
for var I:Integer = 0 to List.Count-1 do
begin
var b: Integer = 1974 I;
end;
Noh, taisinkin tajuta, että tuo näyttää aika typerältä? C :ssa on vaan jotenkin fiksumpi tuommoinen tapaus kummiskin :/ - tarkoituksella,
Pascal on tehty nimenomaan ohjelmoinnin opiskeluun ja tarkoituksena on pakottaa tyyppimäärittelyyn hyvän ohjemointitavan mukaisesti.
Kaikissa kielissähän määrittelyä ei tarvitse tehdä ollenkaan vaan se "arvataan" muuttujan ensimmäisen sijoituksen perusteella. Se saattaa ensituntumalta kuulostaa tehokkaalta mutta johtaa yleensä vähänkin monimutkaisemmassa sovelluksessa isotöiseen debuggaukseen vaikeasti havaittavien virhetoimintojen muodossa.
>...määrittää C tapaan...
Ammattilaisten kielissä kuten Java, C , jne. oletetaan että tyyppimääritys tulee selkäytimestä aina kun muuttujaa ensimmäisen kerran tarvitaan joten sen voi määritellä siinä samalla.- -_.._-
Tuo Pascalin käytäntö on ihan hyvä. Lohkon muuttujat esitellään yhdessä paikassa ja
ne dokumentoidaan siinä. Kun koodia katsoo jälkikäteen niin helposti löytää minkä tyyppimem muuttuja on. Onko esim. muuttujan arvoalue sopiva esim. 0..255 eli byte. "Pascal on tehty nimenomaan ohjelmoinnin opiskeluun"
Ehkä se olikin tehty tuohon joskus kivikaudella. Nykyään se on ohjelmointikieli siinä missä C ja huomattavasti selkeämpi siinä. Javaa ei tehokkuudessa ja monipuolisuudessa voi edes verrata Delphiin.- Ei juu
>Kaikissa kielissähän määrittelyä ei tarvitse tehdä ollenkaan vaan se "arvataan" muuttujan ensimmäisen sijoituksen perusteella.
Kannattaa opetella tämä asia paremmin. Kuka arvaa ja mitä?
>Se saattaa ensituntumalta kuulostaa tehokkaalta mutta johtaa yleensä vähänkin monimutkaisemmassa sovelluksessa isotöiseen debuggaukseen vaikeasti havaittavien virhetoimintojen muodossa.
Pascalin tyyppisysteemin avulla ei voi havaita sellaisia virheitä kuten nollalla jakoa tai väärää laskulogiikkaa käännösvaiheessa. Nämäkin johtavat isotöiseen debuggaukseen, jos ohjelmaa ei testaa kunnolla.
Vapaasti tyypitetyissä kielissä myös tyyppivirheet napataan testausvaiheessa. Siksi ne eivät käytännössä olekaan niin isotöisiä kuin kokematon luulee.
Tosin jos ne muuttujat aiheuttavat niin paljon virheitä, eikö silloin paras ja turvallisin ohjelmointityyli ole sellainen, ettei siinä käytetä muuttujia ollenkaan? :-) - D vuodesta luumu
Ensinnäkin: Pascalin ärsyttävyyksiä: "Olen joskus huomannut, että ainaskin joskus Delphi 2006 yrittää arvata ja lisätä metodin alkuun jonkun muuttujan, mutta ei se oikein toimi :/"
Ei se Delphi siinä mitään arvaile, alustamaton muutuja on mitä siinä osoitteessa silloin on!
Ihan: "Ammattilaisten kielissä kuten Java, C , jne..."
Todellakin, jos arvuuttelee tyyppien kanssa kuten esim. Nuo aloittelevat PHP-koodarit niin ollaan aika heikoilla jäillä, ei se kääntäjäkään ihmeisiin pysty, suosittelen todella joka alan/kielen koodareille natiivin C-kielen ohjelmoinnin hanskaamista, helpottaa kummasti silloin kun ihmetellään miksi miksi?
- Ei Delphi kokemusta
Uskon kysymyksen olevan laadullisesta asiasta, eli siitä, jotta koodia on helppoa analysoida ja osoittaa se toimivaksi. Kun muuttujat ovat esitelty alussa, tietää silloin yhdellä vilaukselta kuinka monta, ja minkä nimisiä, muuttujia funktiossa on, ja mitä muuttujat vievät pinosta tilaa.
Esimerkiksi kielissä joissa ei ole muuttujien tyypitystä ollenkaan, ei edes kääntäjä pysty herjaamaan kaikista mahdollisista tyyppi virheistä. Vastaavasti C kielen ohjelmaa on varsin monimutkaista osoittaa toimivaksi, koska C sallii olion "ylikirjoittaa" perusoperaattorit (=, , ==, jne.).- otaksun näin
Käsittäkseni myös Delphi sallii olion "ylikirjoittaa" operaattoreita.
(joka oikein käytettynä on hyvä asia).
(Paikallisten) muuttujien esittely alussa on hyvä asia.
- ap..
Oli se, että muuttujan voi määrittää C/C :ssa melkein missä tahansa. Delphissä se määritellään aina metodin/funktion alussa. Vie aikaa aina hyppiä sinne metodin alkuun määrittelemään se muuttujan tyyppi.
Mutta jokaisessa kielessä on ne huonot ja hyvät puolet. Silti kyllä tykkään todella paljon Pascalista, ei siitä mitään.- Vinkki vain
Tuo voitaisiin tehdä jonkinlaisella koodin täydentäjällä. Se siirtäisi muuttujan esittelyn
aliohjelman/funktion muuttujien esittelylohkoon (var lohkoon).
Tuo muuttujien esittely omassa lohkossa on se ominaisuus mitä kaipaan (esim) c:ssä! Koodin luettavuus ja ylläpito on helpompaa kun varsinainen toiminta on selkeästi esillä omassa koodilohkossa ja muuttujat kommentoituna omassa! - puutteita...
Vinkki vain kirjoitti:
Tuo voitaisiin tehdä jonkinlaisella koodin täydentäjällä. Se siirtäisi muuttujan esittelyn
aliohjelman/funktion muuttujien esittelylohkoon (var lohkoon).
Tuo muuttujien esittely omassa lohkossa on se ominaisuus mitä kaipaan (esim) c:ssä! Koodin luettavuus ja ylläpito on helpompaa kun varsinainen toiminta on selkeästi esillä omassa koodilohkossa ja muuttujat kommentoituna omassa!Ikävintä on, että kaikki lausekkeet eivät palauta arvoa. Se estää lauseet tyyliin write(read(a)) tai a := b := 0; No, ehkä se on katsottu vaarallisiksi alunperin opetukseen tarkoitetussa kielessä, mutta Delphissä tän olisi jo voinut korjata.
Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää.
Ternary-operaattoria "(a < b ? a : b)" ei taida olla vieläkään Delphissä? - d vuodesta luumu
puutteita... kirjoitti:
Ikävintä on, että kaikki lausekkeet eivät palauta arvoa. Se estää lauseet tyyliin write(read(a)) tai a := b := 0; No, ehkä se on katsottu vaarallisiksi alunperin opetukseen tarkoitetussa kielessä, mutta Delphissä tän olisi jo voinut korjata.
Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää.
Ternary-operaattoria "(a < b ? a : b)" ei taida olla vieläkään Delphissä?Mielestäni "begin..end;" lohko on luettavuuden puolesta parempi kuin yleisesti käytetty "{}", tällöin sulut yms metodien alku ja loppu erottuu jo ensi silmäyksellä.
Kuten myös uskon että nuo muutkin esittelemäsi operaatiot eivät ole tuettuina, koska ylläpito/luettavuus kärsii, jos joku nyt sattuu ihmettelemään miksi sen luettavuuden yms tulee tulee olla selkeää, yksinkertaista ja hyvin kommentoitua niin voin sanoa kokemuksella, että toisen tekemää koodia kun rupeaa päivittelemään niin säästää todella paljon aikaa siinä kun selvittää itselleen mitä- ja miksi ex koodari on näin tehnyt, jos koodi on epäselvää ja muuttujat yms yms kaikki oman mielen mukaan järkevästi aseteltu niin kyllä rupeaa näppäimistö kärsimään.. - d vuodesta luumu
d vuodesta luumu kirjoitti:
Mielestäni "begin..end;" lohko on luettavuuden puolesta parempi kuin yleisesti käytetty "{}", tällöin sulut yms metodien alku ja loppu erottuu jo ensi silmäyksellä.
Kuten myös uskon että nuo muutkin esittelemäsi operaatiot eivät ole tuettuina, koska ylläpito/luettavuus kärsii, jos joku nyt sattuu ihmettelemään miksi sen luettavuuden yms tulee tulee olla selkeää, yksinkertaista ja hyvin kommentoitua niin voin sanoa kokemuksella, että toisen tekemää koodia kun rupeaa päivittelemään niin säästää todella paljon aikaa siinä kun selvittää itselleen mitä- ja miksi ex koodari on näin tehnyt, jos koodi on epäselvää ja muuttujat yms yms kaikki oman mielen mukaan järkevästi aseteltu niin kyllä rupeaa näppäimistö kärsimään....Sitä varten on hyvä että jo kääntäjän/editorin puolesta tähän puututaan, tavalla tai toisella, koska jos oppii väärän ns. oman tavan kirjoittaa tahtonsa ruudelle niin siitä on vaikea päästä eroon. Uskon että todellakin tuo luettavuus on monelle se asia numero 1, ainakin minulle.
- Delphiosaaja
puutteita... kirjoitti:
Ikävintä on, että kaikki lausekkeet eivät palauta arvoa. Se estää lauseet tyyliin write(read(a)) tai a := b := 0; No, ehkä se on katsottu vaarallisiksi alunperin opetukseen tarkoitetussa kielessä, mutta Delphissä tän olisi jo voinut korjata.
Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää.
Ternary-operaattoria "(a < b ? a : b)" ei taida olla vieläkään Delphissä?"Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää. "
no huhhuh!
Tuo nyt ei paljasta muuta kuin sen että kirjoittaja ei osaa hyödyntää Delphin nerokkaan IDE:n mahdollisuuksia.
Itse koodia kirjoittaessani kirjoitan vain be, painan ctrl-J ja enter.
Seurauksena tästä Delphin automatiikka tuottaa seuraavaa:
begin
|
end;
missä "|" kuvaa kohtaa, johon kohdistin jää Ctrl-J:n ja ENTERin painalluksen jäkeen.
Jos ei tuota ole valmiina Delphissä, niin sen saa lisättyä näin:
(Ohje sellaisenaan Delphi 7:ään, mutta sama periaate toimiii muissakin versioissa, yksityiskohdissa voi olla eroja)
Tools - Editor Options - Source Options - Edit Code Templates; näin avautuvasta dialogista löytyy työvälineet omien "code template":jen luontiin ja/tai olemassaolevien muokkaukseen.
(object)pascalissa { ja } ovat kommenttimerkkejä, kuten myös (* sekä *) kuten myös yhden rivin kommentti //.
C/C :n tapa lohkottaa { ja } -merkeillä on ruma ja sekava.
begin ja end erottuvat koodista selkeästi, vaikka olisi pienempikin fontti käytössä.
Jos vielä haluaa lisäerottuvuutta, sitä Delphin mainio IDE tarjoaa mahdollistamalla varattujen sanojen lihavoinnin sekä tekstin/taustan värivalinnan mahdoliistamalla.
Delphin IDE:ssä on paljon muitakin koodausta helpottavia toimintoja, mainittakoon vaikkapa Ctrl-Shift-R (=macro record; nauhoitus loppuu painamalla samaa näppäinyhdistelmää uudelleen) sekä sen vastine Ctrl-Shift-P (=Macro Play).
Nämä kun yhdistää 9 numeroituun kirjanmerkkiin:
asetus: Ctrl-K 1 .. Ctrl-K 9
käyttö: Ctrl-Q 1 .. Ctrl-Q 9
niin näillä kahdella yhdessä voi tehdä sellaisiakin toistuvia editointeja joissa Delphin Search/Replace on jopa "regular expressions" -toimintokin käyttäen voimaton.
Esimerkkinä vaikkapa C struktuurin muunnos Delphin (packed) Recordiksi.
Tuo Search/Replace "regular expressions" on muuten buginen: jos maalaat vain osan rivistä ja rajaat muutoksen "vain valittu alue" ja painat "Replace All" niin yllätys: muutoksia tehdään myös maalatun rivin maalaamattomalle osalle. Ikävä kyllä Delphissäkin on bugeja, vaikka muuten mainio ja tehokas väline onkin.
Ehkäpä paras tapa kiertää bugi olisi:
1. paina ENTER maalatuksi aikomasi alueen alussa ja lopussa
2. maalaa nyt koko haluttu rivi
3. tee muutokset
4. tarkista että meni oikein ja korjaa jos ei mennyt
5. yhdistä näin syntyneet 3 riviä takaisin 1:ksi. - Delphiosaaja
Delphiosaaja kirjoitti:
"Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää. "
no huhhuh!
Tuo nyt ei paljasta muuta kuin sen että kirjoittaja ei osaa hyödyntää Delphin nerokkaan IDE:n mahdollisuuksia.
Itse koodia kirjoittaessani kirjoitan vain be, painan ctrl-J ja enter.
Seurauksena tästä Delphin automatiikka tuottaa seuraavaa:
begin
|
end;
missä "|" kuvaa kohtaa, johon kohdistin jää Ctrl-J:n ja ENTERin painalluksen jäkeen.
Jos ei tuota ole valmiina Delphissä, niin sen saa lisättyä näin:
(Ohje sellaisenaan Delphi 7:ään, mutta sama periaate toimiii muissakin versioissa, yksityiskohdissa voi olla eroja)
Tools - Editor Options - Source Options - Edit Code Templates; näin avautuvasta dialogista löytyy työvälineet omien "code template":jen luontiin ja/tai olemassaolevien muokkaukseen.
(object)pascalissa { ja } ovat kommenttimerkkejä, kuten myös (* sekä *) kuten myös yhden rivin kommentti //.
C/C :n tapa lohkottaa { ja } -merkeillä on ruma ja sekava.
begin ja end erottuvat koodista selkeästi, vaikka olisi pienempikin fontti käytössä.
Jos vielä haluaa lisäerottuvuutta, sitä Delphin mainio IDE tarjoaa mahdollistamalla varattujen sanojen lihavoinnin sekä tekstin/taustan värivalinnan mahdoliistamalla.
Delphin IDE:ssä on paljon muitakin koodausta helpottavia toimintoja, mainittakoon vaikkapa Ctrl-Shift-R (=macro record; nauhoitus loppuu painamalla samaa näppäinyhdistelmää uudelleen) sekä sen vastine Ctrl-Shift-P (=Macro Play).
Nämä kun yhdistää 9 numeroituun kirjanmerkkiin:
asetus: Ctrl-K 1 .. Ctrl-K 9
käyttö: Ctrl-Q 1 .. Ctrl-Q 9
niin näillä kahdella yhdessä voi tehdä sellaisiakin toistuvia editointeja joissa Delphin Search/Replace on jopa "regular expressions" -toimintokin käyttäen voimaton.
Esimerkkinä vaikkapa C struktuurin muunnos Delphin (packed) Recordiksi.
Tuo Search/Replace "regular expressions" on muuten buginen: jos maalaat vain osan rivistä ja rajaat muutoksen "vain valittu alue" ja painat "Replace All" niin yllätys: muutoksia tehdään myös maalatun rivin maalaamattomalle osalle. Ikävä kyllä Delphissäkin on bugeja, vaikka muuten mainio ja tehokas väline onkin.
Ehkäpä paras tapa kiertää bugi olisi:
1. paina ENTER maalatuksi aikomasi alueen alussa ja lopussa
2. maalaa nyt koko haluttu rivi
3. tee muutokset
4. tarkista että meni oikein ja korjaa jos ei mennyt
5. yhdistä näin syntyneet 3 riviä takaisin 1:ksi.Seurauksena tästä Delphin automatiikka tuottaa seuraavaa:
begin
..|
end;
siis noita pisteitä ei tietenkään sinne tule, mutta ilman niitä Suomi24 forumsofta vääristää paikan, mihin se kohdistin jää. Se jää siis sarakkeeseen 3, EI sarakkeeseen 1 kuten edellisestä kirjoituksestani saattaa saada väärän kuvan asiasta.
Tämä väärinkäsitys siis on kokonaan suom24 forumsoftan syytä, joka poistaa kirjoitetun rivin alussa olevat välilyönnit ja näin pilaa ohjelmakoodirivien oikean sisennyksen. - d vuodesta luumu
Delphiosaaja kirjoitti:
Seurauksena tästä Delphin automatiikka tuottaa seuraavaa:
begin
..|
end;
siis noita pisteitä ei tietenkään sinne tule, mutta ilman niitä Suomi24 forumsofta vääristää paikan, mihin se kohdistin jää. Se jää siis sarakkeeseen 3, EI sarakkeeseen 1 kuten edellisestä kirjoituksestani saattaa saada väärän kuvan asiasta.
Tämä väärinkäsitys siis on kokonaan suom24 forumsoftan syytä, joka poistaa kirjoitetun rivin alussa olevat välilyönnit ja näin pilaa ohjelmakoodirivien oikean sisennyksen.Paljonko normaali osaava henkilö häviää ajassa jos kirjoittaa "{}" tai "begin..end;"
Itselläni ainakin nuo kaksi sanaa tulevat jo ilman ajatusta ruudulle, olet kyllä oikeassa että ide:ssä on hyviä nuo templatet yms pikatoiminnot.. - Kysyjä vaan
puutteita... kirjoitti:
Ikävintä on, että kaikki lausekkeet eivät palauta arvoa. Se estää lauseet tyyliin write(read(a)) tai a := b := 0; No, ehkä se on katsottu vaarallisiksi alunperin opetukseen tarkoitetussa kielessä, mutta Delphissä tän olisi jo voinut korjata.
Myöskin begin ja end on ikävä kirjoittaa, { ja } on niin paljon näppärämpää.
Ternary-operaattoria "(a < b ? a : b)" ei taida olla vieläkään Delphissä?Mikä on ternary operaattori ja mihin sitä käytetään?
Mitä se tekee? - ternary
Kysyjä vaan kirjoitti:
Mikä on ternary operaattori ja mihin sitä käytetään?
Mitä se tekee?Se evaluoi 1. operandina olevan ehdon. Jos ehto on tosi, lauseen arvoksi tulee 2. operandi. Jos ehto ei ole tosi, arvoksi tulee 3. operandi.
Esimerkiksi halutaan sijoittaa muuttujan min arvoksi joko muuttujan a tai muuttujan b arvo sen mukaan, kumpi on pienempi (käytän tässä Pascalin sijoitusmerkkiä vaikka Pascalissa ei ternaryä olekaan, koska tämä on Delphi-palsta).
min := (a < b ? a : b)
jos ehto on totta eli a < b niin min := a, muutoin min := b. (huomaa että jos a = b, niin a < b ei ole tosi, joten arvoksi tulee b).
Sama if-then-else -rakenteella olisi
if (a < b) then min := a else min := b
Ternary on siis eräänlainen lyhennysmerkitä if-the-else:lle ja usein näppärämpi kirjoittaa, koska se palauttaa arvon. Esim.
write('pienempi luku on ' (a < b ? a : b);
Toivottavasti tämä selvitti asiaa. - ap..
ternary kirjoitti:
Se evaluoi 1. operandina olevan ehdon. Jos ehto on tosi, lauseen arvoksi tulee 2. operandi. Jos ehto ei ole tosi, arvoksi tulee 3. operandi.
Esimerkiksi halutaan sijoittaa muuttujan min arvoksi joko muuttujan a tai muuttujan b arvo sen mukaan, kumpi on pienempi (käytän tässä Pascalin sijoitusmerkkiä vaikka Pascalissa ei ternaryä olekaan, koska tämä on Delphi-palsta).
min := (a < b ? a : b)
jos ehto on totta eli a < b niin min := a, muutoin min := b. (huomaa että jos a = b, niin a < b ei ole tosi, joten arvoksi tulee b).
Sama if-then-else -rakenteella olisi
if (a < b) then min := a else min := b
Ternary on siis eräänlainen lyhennysmerkitä if-the-else:lle ja usein näppärämpi kirjoittaa, koska se palauttaa arvon. Esim.
write('pienempi luku on ' (a < b ? a : b);
Toivottavasti tämä selvitti asiaa.Tuo "Ternary" juttu on kyllä kätsä C:n kaltaisissa kielissä, jota olen käyttänyt. Tosin tuo "Ternary" termi on ihan uusi mulle :)
Siitä on aikaa kun c :lla koodasin, mutta c :ssa on myös hieno juttu tämmöinen..
if ( bool h = DoSomething( X ) )
{
..if ( !h )
..{
.... error message!...
..}
}
Samoin C/C ei erottele muuttujien tyyppiä, joko homma on tosi tai epätosi, thats it!
Saattaa näyttää oudolta sekasotkulta, mutta jos ymmärtää asian pointin, niin on kyllä tehokas tapa koodata, pakko myöntää :)
Ja vaikka tykkäänkin Pascalista, niin jotenkin silti kaipaan C-kielien kaltaista ytimekkyyttä :)
Mutta on C huonojakin puolia, ei sen puoleen. - ap..
ap.. kirjoitti:
Tuo "Ternary" juttu on kyllä kätsä C:n kaltaisissa kielissä, jota olen käyttänyt. Tosin tuo "Ternary" termi on ihan uusi mulle :)
Siitä on aikaa kun c :lla koodasin, mutta c :ssa on myös hieno juttu tämmöinen..
if ( bool h = DoSomething( X ) )
{
..if ( !h )
..{
.... error message!...
..}
}
Samoin C/C ei erottele muuttujien tyyppiä, joko homma on tosi tai epätosi, thats it!
Saattaa näyttää oudolta sekasotkulta, mutta jos ymmärtää asian pointin, niin on kyllä tehokas tapa koodata, pakko myöntää :)
Ja vaikka tykkäänkin Pascalista, niin jotenkin silti kaipaan C-kielien kaltaista ytimekkyyttä :)
Mutta on C huonojakin puolia, ei sen puoleen.Tais pettää...
Eli tietysti ehto täyttyi jo tuossa if (bool h = DoSomethin( X ) ) ehdossa! Mutta silti olen kateellinen C :lle, että siinä voi helposti määrittää "väliaikaisia" muuttujia, kesken koodin :) - jepjepjep
ap.. kirjoitti:
Tuo "Ternary" juttu on kyllä kätsä C:n kaltaisissa kielissä, jota olen käyttänyt. Tosin tuo "Ternary" termi on ihan uusi mulle :)
Siitä on aikaa kun c :lla koodasin, mutta c :ssa on myös hieno juttu tämmöinen..
if ( bool h = DoSomething( X ) )
{
..if ( !h )
..{
.... error message!...
..}
}
Samoin C/C ei erottele muuttujien tyyppiä, joko homma on tosi tai epätosi, thats it!
Saattaa näyttää oudolta sekasotkulta, mutta jos ymmärtää asian pointin, niin on kyllä tehokas tapa koodata, pakko myöntää :)
Ja vaikka tykkäänkin Pascalista, niin jotenkin silti kaipaan C-kielien kaltaista ytimekkyyttä :)
Mutta on C huonojakin puolia, ei sen puoleen.Nimi "ternary" tulee siitä, että operandeja on 3. Yleensähän operaattorilla on kaksi (esim. a b) tai yksi (esim. a ) operandi.
Tuolta voi lukea lisää
http://en.wikipedia.org/wiki/Ternary_operation - TesTeRi
ternary kirjoitti:
Se evaluoi 1. operandina olevan ehdon. Jos ehto on tosi, lauseen arvoksi tulee 2. operandi. Jos ehto ei ole tosi, arvoksi tulee 3. operandi.
Esimerkiksi halutaan sijoittaa muuttujan min arvoksi joko muuttujan a tai muuttujan b arvo sen mukaan, kumpi on pienempi (käytän tässä Pascalin sijoitusmerkkiä vaikka Pascalissa ei ternaryä olekaan, koska tämä on Delphi-palsta).
min := (a < b ? a : b)
jos ehto on totta eli a < b niin min := a, muutoin min := b. (huomaa että jos a = b, niin a < b ei ole tosi, joten arvoksi tulee b).
Sama if-then-else -rakenteella olisi
if (a < b) then min := a else min := b
Ternary on siis eräänlainen lyhennysmerkitä if-the-else:lle ja usein näppärämpi kirjoittaa, koska se palauttaa arvon. Esim.
write('pienempi luku on ' (a < b ? a : b);
Toivottavasti tämä selvitti asiaa.Eikö IfThen-funktio aja saman asian?
Vinkki:
http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000646&posting=22000000039353711 - Näinhän se taitaa olla
ternary kirjoitti:
Se evaluoi 1. operandina olevan ehdon. Jos ehto on tosi, lauseen arvoksi tulee 2. operandi. Jos ehto ei ole tosi, arvoksi tulee 3. operandi.
Esimerkiksi halutaan sijoittaa muuttujan min arvoksi joko muuttujan a tai muuttujan b arvo sen mukaan, kumpi on pienempi (käytän tässä Pascalin sijoitusmerkkiä vaikka Pascalissa ei ternaryä olekaan, koska tämä on Delphi-palsta).
min := (a < b ? a : b)
jos ehto on totta eli a < b niin min := a, muutoin min := b. (huomaa että jos a = b, niin a < b ei ole tosi, joten arvoksi tulee b).
Sama if-then-else -rakenteella olisi
if (a < b) then min := a else min := b
Ternary on siis eräänlainen lyhennysmerkitä if-the-else:lle ja usein näppärämpi kirjoittaa, koska se palauttaa arvon. Esim.
write('pienempi luku on ' (a < b ? a : b);
Toivottavasti tämä selvitti asiaa.Tämä ternary-operaattori taitaa olla c-sukuisten kielin muinainen jäänne jota
ei toteutettaisi tällä tavoin nykyään jos ohjelmointikieli suunniteltaisiin puhtaalta pöydältä! - sitten
Näinhän se taitaa olla kirjoitti:
Tämä ternary-operaattori taitaa olla c-sukuisten kielin muinainen jäänne jota
ei toteutettaisi tällä tavoin nykyään jos ohjelmointikieli suunniteltaisiin puhtaalta pöydältä!"Tämä ternary-operaattori taitaa olla c-sukuisten kielin muinainen jäänne jota
ei toteutettaisi tällä tavoin nykyään jos ohjelmointikieli suunniteltaisiin puhtaalta pöydältä!"
Ihan mielenkiinnosta, miten se sitten toteutettaisiin puhtaalta pöydältä? - TRRY
sitten kirjoitti:
"Tämä ternary-operaattori taitaa olla c-sukuisten kielin muinainen jäänne jota
ei toteutettaisi tällä tavoin nykyään jos ohjelmointikieli suunniteltaisiin puhtaalta pöydältä!"
Ihan mielenkiinnosta, miten se sitten toteutettaisiin puhtaalta pöydältä?Pythoniin tuli tällainen ehtolauseke versiosta 2.5 alkaen. Lopulliseksi muodoksi määräytyi C:stä poiketen
if else
kun taas C:ssähän sama asia hoidetaan
? :
Sivulta
http://www.python.org/dev/peps/pep-0308/
löytyy myös muita Pythoniin ehdotettuja syntakseja sekä niiden hyvien ja huonojen puolien puntarointia. Ne lukemalla saa jonkinlaisen käsityksen siitä, millaista tällaisen ominaisuuden lisääminen ohjelmointikieleen on: monta asiaa joutuu ottamaan huomioon ja silti voi mennä metsään.
- .......
"begin-end" blokin määrittely, miksei vaan voi olla { ja }, vähemmän naputtelemista ?
- askeltaja
Joskus 1980-luvulla tuli Turbo Pascal. Sen yksi merkitys oli ohjelmointityön helpottaminen. Sen jälkeen kehitys on edennyt ja nykyään monet asiat tehdään erilaisilla koodin täydentimillä.
Nykyisillä editoreilla begin end -lohkon tuottaminen onnistuu helposti. Begin - end lohkot ovat paljon helpommin hahmotettavissa nykyisillä syntaksin korostuksen omaavilla editoreilla kuin yhden merkin aaltosulje.
Vinkkinä kannattaa opetella käyttämään editoria! - Delphiosaaja
begin-end 3 näppäilyllä!
miten muka { } on vähemmän naputtelemista kuin b ctrl-J enter ?
molemmissa tasan 3 näppäilyä !
ks. aiemmin ketjussa:
"begin/end on HELPPO kirjoittaa"
SEKÄ "Täsmennys" - d vuodesta luumu
Delphiosaaja kirjoitti:
begin-end 3 näppäilyllä!
miten muka { } on vähemmän naputtelemista kuin b ctrl-J enter ?
molemmissa tasan 3 näppäilyä !
ks. aiemmin ketjussa:
"begin/end on HELPPO kirjoittaa"
SEKÄ "Täsmennys"Delphin väsänneet häiskät ei varmaan tarkottanu tätä, tai sitten teki tahallaan :), mut useasti tullut mieleeen, et onko tää jotain c-kielien boikotointii yms vai huumorii, kun käännät joskus c- yms sukuisia kieliä delphille, niin ovat suoraan kommentoituna delphissä, {}- aaltosulkeilla :D
- Vain kuvitelmaa
d vuodesta luumu kirjoitti:
Delphin väsänneet häiskät ei varmaan tarkottanu tätä, tai sitten teki tahallaan :), mut useasti tullut mieleeen, et onko tää jotain c-kielien boikotointii yms vai huumorii, kun käännät joskus c- yms sukuisia kieliä delphille, niin ovat suoraan kommentoituna delphissä, {}- aaltosulkeilla :D
Delphin edeltäjä oli Turbo Pascal (Taustalla sama Pascal kieli ja sama firma).
Ennen Turbo Pascalia oli monia Pascal kääntäjiä mm MicroSoft:llakin oli omansa.
Ennen Apple omaa Pascal-kääntäjää oli USCD-Pascal. Pascal syntyi 1970 kun taas C syntyi 1972. C:n edeltäjä oli BCPL. Noi ensimmäiset Pascal:t pohjautuivat Algol-kieleen.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Nurmossa kuoli 2 Lasta..
Autokolarissa. Näin kertovat iltapäivälehdet juuri nyt. 22.11. Ja aina ennen Joulua näitä tulee. . .794468Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen503105Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/15256631353091Mikko Koivu yrittää pestä mustan valkoiseksi
Ilmeisesti huomannut, että Helenan tukijoukot kasvaa kasvamistaan. Riistakamera paljasti hiljattain kylmän totuuden Mi4002179Purra hermostui A-studiossa
Purra huusi ja tärisi A-studiossa 21.11.-24. Ei kykene asialliseen keskusteluun.2191296Ensitreffit Hai rehellisenä - Tämä intiimiyden muoto puuttui suhteesta Annan kanssa: "Meillä ei..."
Hai ja Anna eivät jatkaneet avioliittoaan Ensitreffit-sarjassa. Olisiko mielestäsi tällä parilla ollut mahdollisuus aito111203- 761197
Joel Harkimo seuraa Martina Aitolehden jalanjälkiä!
Oho, aikamoinen yllätys, että Joel Jolle Harkimo on lähtenyt Iholla-ohjelmaan. Tässähän hän seuraa mm. Martina Aitolehde301064- 631056
Miksi pankkitunnuksilla kaikkialle
Miksi rahaliikenteen palveluiden tunnukset vaaditaan miltei kaikkeen yleiseen asiointiin Suomessa? Kenen etu on se, että111983