<?xml version="1.0" encoding="ISO-8859-15"?>
<rss version="2.0"><channel>
<title>symboli</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/</link>
<description>Recent changes in symboli</description>
<item><title>symboli</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/symboli</link>
<guid>http://sange.fi/~atehwa/cgi-bin/piki.cgi/#1366112149</guid>
<description>&lt;p&gt;Symboli on ihan loistava tietotyyppi, mutta useimmat ohjelmoijat 
eivät edes tiedä niiden olemassaolosta; tai ovat tottuneet pärjäämään 
&lt;ins&gt;ilman&lt;/ins&gt; niitä, jolloin eivät osaa hyödyntää niitä edes, vaikka 
ne olisivat tarjolla. Tämän kirjoituksen pointti on selittää, mitä 
hyötyä symboleista on, ja innostaa ihmiset käyttämään symboleita 
enemmän ohjelmissaan. 

&lt;p&gt;Symbolien käyttö on synergeettistä, vähän niin kuin esimerkiksi se, 
että esittää tekstin aina tunnetussa merkistössä (kuten Unicodena). 
Tekstit kannattaa muuttaa Unicodeksi (ja &lt;del&gt;nimet&lt;/del&gt; 
&lt;ins&gt;nimet/tunnisteet&lt;/ins&gt; symboleiksi) ''heti'', kun ohjelma ottaa ne 
vastaan, niitä kannattaa käsitellä ohjelman sisäisesti aina Unicodena 
(ja symboleina), ja ne kannattaa muuttaa tavuiksi (merkeiksi) vasta, 
kun data lähtee ohjelmasta esim. tiedostoon tai verkkoon. 
Rakenteettoman tietotyypin käyttö saattaa tuntua helpommalta, 
"suoraviivaisemmalta", mutta aina, kun haluaa jollain tavoin 
prosessoida tietoa, on mukavampaa, jos sillä on selkeä rakenne. Ja 
symbolit antavat nimille rakenteen. 

&lt;p&gt;[...]

&lt;p&gt;Minkä rakenteen symboli antaa &lt;del&gt;nimelle (merkkijonolle)?&lt;/del&gt; 
&lt;ins&gt;merkkijonolle?&lt;/ins&gt; Sen, että sama &lt;del&gt;nimi&lt;/del&gt; 
&lt;ins&gt;nimi/tunniste&lt;/ins&gt; (merkkijono) viittaa aina samaan asiaan. Tämä 
on oikeasti merkkijonotietotyypin ja symbolin ainoa ero: symboli on 
merkkijono, josta taataan, että kaksi samansisältöistä merkkijonoa ovat 
aina sama merkkijono. Käytännössä tämä tarkoittaa, että kahden symbolin 
vertaaminen toisiinsa on yhtä nopeaa kuin pienten kokonaislukujen. 
(Usein symboliin voi myös liittää lisätietoja.) 

&lt;p&gt;Symbolittomissa kielissä, kuten Javassa, &lt;del&gt;C:ssä&lt;/del&gt; 
&lt;ins&gt;C:ssä, Pythonissa&lt;/ins&gt; jne., ohjelmoijat ovat usein tottuneet 
käyttämään lukuja tai luetelmia (enumeraatioita) tilanteissa, joissa 
tarvitsee ilmaista jokin monesta vaihtoehdosta. Esimerkiksi funktio, 
joka palauttaa kahden merkkijonon keskinäisen järjestyksen, voi 
ilmaista sen palauttamalla nollan tai negatiivisen tai positiivisen 
luvun sen mukaan, kumpi merkkijono on aakkostuksessa aiempi. Monet 
proseduurit palauttavat niin ikään ''virhekoodeja'' tai jonkin 
erityisarvon (kuten -1) tilanteessa, jossa ei ole kunnollista 
palautettavaa. Sama juttu funktioiden syötteissä: jos jokin syöte on 
monivalinta, siinä käytetään yleensä luetelmia. 

&lt;p&gt;[...]

&lt;p&gt;Symbolit ovat itsensä dokumentoivia, tehokkaasti toteutettuja 
&lt;del&gt;arvoja.&lt;/del&gt; &lt;ins&gt;tunnisteita.&lt;/ins&gt; Se, että käyttää numeroita 
symbolien sijasta tällaiseen, on kuin käyttäisi rivinumeroita 
funktionimien sijasta viitatakseen ohjelman osiin. Symboleita ei 
tarvitse edes deklaroida millään tavoin, niitä voi käyttää saman tien. 
Tietyt tietotyypit, joiden arvoja on äärellinen määrä -- totuusarvot, 
tyhjä lista, viikonpäivät -- ovat ilman muuta symboleja. 

&lt;p&gt;Joissakin tietotyypeissä on ''potentiaalisesti'' ääretön määrä 
arvoja, mutta jotkin ovat yleisiä: värien nimet, henkilön 
ominaisuuksien nimet, luonnollisen kielen sanat, kuvien luokitteluun 
käytetyt tagit, protokollan eri viestit. Näissä ei ole edes mahdollista 
määritellä etukäteen kaikkia mahdollisia arvoja, mutta &lt;del&gt;symboleita 
voi&lt;/del&gt; &lt;ins&gt;symboleitapa voikin&lt;/ins&gt; muodostaa loputtomasti lisää 
ja kaikki on hyvin. 

&lt;p&gt;Tekstin käsittely on usein &lt;del&gt;nopeampaa symboleilla.&lt;/del&gt; 
&lt;ins&gt;nopeampaa, kun muuntaa tekstin symboleiksi.&lt;/ins&gt; Ei tosin ole 
kannattavaa muuttaa isoa tekstimössöä ''yhdeksi'' symboliksi, koska 
tämän symbolin vertailusta muihin on tuskin paljonkaan hyötyä. Mutta 
riippuen siitä, mitä tekstillä haluaa tehdä, esimerkiksi sen ''sanat'' 
(tai muut osat, kuten välimerkkien erottamat osat) voi muuttaa 
symboleiksi ja panna listaan. Jos etsii tekstistä paljon erilaisia 
ilmauksia, symbolien käyttö nopeuttaa prosessointia huomattavasti. 

&lt;p&gt;Symboleita kannattaa käyttää myös tietorakenteissa siellä, missä 
muuten käytettäisiin luetelmia, tageja tai nimiä. Jos esimerkiksi 
mallinnat dokumentin rakennepuuta, jokaisessa puun solmussa kannattaa 
ensimmäiseksi olla symboli, joka kertoo, minkälaisesta puun osasta on 
kyse (esim. kappale / korostus / otsikko / sana). 
&lt;ins&gt;IRC-protokollassa käyttäjien ja kanavien nimet sekä viestityypit 
ovat ilman muuta symboleita, koska ne ovat yksittäisten olioiden 
yksiselitteisiä tunnisteita.&lt;/ins&gt; 

&lt;p&gt;Jos &lt;del&gt;haluat&lt;/del&gt; &lt;ins&gt;lähdetään kehittämään 
tietorakenneajatusta pidemmälle, niin&lt;/ins&gt; dynaamisesti tyypitetyn 
&lt;del&gt;oliojärjestelmän,&lt;/del&gt; &lt;ins&gt;oliojärjestelmän saa 
merkitsemällä&lt;/ins&gt; olioihin &lt;del&gt;kannattaa merkitä luokka&lt;/del&gt; 
&lt;ins&gt;luokan&lt;/ins&gt; symbolilla. Jos haluat toteuttaa ohjelmointikielen, 
muuttujiin ja funktioihin kannattaa viitata &lt;ins&gt;ohjelmakoodista 
jäsennetyssä syntaksipuussa&lt;/ins&gt; symboleilla, ja jos teet 
&lt;del&gt;tietorakenteen,&lt;/del&gt; &lt;ins&gt;tietuemäärittelyn,&lt;/ins&gt; jossa on monta 
kenttää, kenttien nimien kannattaa olla symboleita. 

&lt;p&gt;Staattisissa kielissä käytetään joskus symbolien sijaan 
deklaraatioita: muuttujien, luokkien, jäsenkenttien, metodien ja 
funktioiden deklaraatioita. Tämä on ihan hyväksyttävä tapa antaa 
nimille identiteetti (tai asioille nimi). &lt;del&gt;Mutta dynaamisissa&lt;/del&gt; 
&lt;ins&gt;Tunnisteet (''identifier'') ''ovat'' symbolien käännösaikainen 
vastine: nimi jollekin, joka oikeasti on vain muistiosoite tai numero. 
Dynaamisissa&lt;/ins&gt; kielissä, joissa kaikkea ei tarvitse määritellä 
etukäteen, symbolit ovat verraton &lt;del&gt;selkeytys.&lt;/del&gt; &lt;ins&gt;selkeytys; 
ja jos haluaa introspektiivisesti tutkia ohjelmaansa ajonaikaisesti, on 
luontevaa viitata myös käännösaikaisiin nimiin ajonaikaisilla 
symboleilla. (Symboleja tukevat kielet (Scheme, Lisp, Ruby) käytännössä 
aina yhdistävät käännösaikaisen nimiavaruuden ajonaikaisten symbolien 
nimiavaruuteen.)&lt;/ins&gt; 

&lt;p&gt;[...]

</description>
<pubDate>Tue, 16 Apr 2013 11:35:49 +0000</pubDate>
</item>

</channel></rss>
