Propertyt Javaan - paremmin kuin C#ssa?

symbiatch - 24.05.2007 11.56 - ohjelmointi 

Törmäsin tässä aika huvittavaan pätkään tonkiessani nettiä ihan muista asioista. Cay Horstmannin sivuilla (näyttää kirjoittaneen useita kirjoja Javasta jne eli tietänee sentään jotain, toisaalta on opetusvirassa) on linkki hänen oppilaansa tekemään viritelmään jolla saisi propertyt Javaan. C#:ssahan moiset ovat oikein mukavia. Hän kylläkin mainitsee tästä viritelmästä: "Like C#, just better." Ja toivoo että Java 7 sisältäisi nämä. Katsotaanpa miten ovat parempia.

Ehdottavat seuraavaa muotoa:

@Property
private String name;

Joka sitten tuottaisi tällaisen Java-koodin:

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

Ok. Eli siis parempaa kuin C# lienee se, että C#:lla joutuisi tekemään näin:

private string _name;

public string Name()
{
    get { return _name; }
    set { _name = value; }
}

Eli hieman vaikeampaa, mutta helpompaa kuin Javassa nykyään. Mutta jos sitten mietitään mikä se pointti on: propertyjen idea on suojata dataa ja hallita miten sitä käsitellään. Heidän esittämänsä yksinkertainen esimerkki on järjetön. Vaikka kuinka olioinnin paradigmat sanoisivat, ettei ikinä saa päästää suoraan kiinni muuttujiin, minä en sitä syö. Jos kerran saa lukea ja kirjoittaa mitä tahansa, miksi tehdä toimintaa hidastavat getterit ja setterit? Ja kun heidän esimerkkinsä todellakin vain tekee tuon!

Myöskin ihmetyttää miten tuo heidän makroviritelmänsä on parempi kuin C# kun sillä ei näytä saavan tehtyä edes tällaista perustoimintoa:

private int _length;

public int Length()
{
    get { return _length; }
    set
    {
        if (value < 0)
        {
            throw new ArgumentException("Value cannot be negative");
        }
    }
}

Saati sitten vaikkapa metodikutsuja tiedon päivittämiseen kantaan tai laskentarutiinia joka palauttaa sisäisen metrisen mitan maileina tai...

Mutta tokihan tällaisia ei kukaan kaipaa, joten heidän esittämänsä propertyt riittävät. Vai pitäisiköhän heidän miettiä hieman uudestaan miten homma pitäisi tehdä?

Argh. Juuri huomasin että tyyppi on todellakin käsittänyt asiat ihan väärin:

Properties are useful for specifying, that is, marking certain aspects of the entity that are to be highlighted to a client of this entity, and in doing so, allowing this client to deduce special behavior from these markings. For example, a Widget class can define properties to represent its visual aspects, which can later be used by a GUI builder tool.

Tuota... Ehkä kannattaisi laajentaa maailmankatsomusta. Kyllä niitä noihinkin voi käyttää (ja C#:ssa on sitten vielä attribuutit joilla määritellään mukavia lisäjuttuja), mutta kyllä niillä on ihan tärkeämpiä perustoiminteita kuten juurikin datan eheyden varmistus.

Lue kommentit (4) | Kommentoi

Oi voi Carbidea

symbiatch - 15.05.2007 11.16 - mobiili ohjelmointi 

Carbide.c++ 1.2 tuossa jokin aika sitten tuli valmiiksi ja laitettiin pihalle. Voisi nyt betan jälkeen kommentoida hieman asiaa kun tuolla aiemmin jo positiivissävytteisesti jotain sanoinkin. Arvannette että tämä ei ole niinkään positiivinen kirjoitus.

Ensinnäkin, olen aina ollut pitämättä Eclipsestä ("inhota" olisi ehkä liian vahva sana tähän). En pidä workspace-ideasta, varsinkaan siksi että kaikki asetukset joutuu tekemään joka workspaceen erikseen. Miksei voi olla jotain globaaleja asetuksia? En myöskään pidä siitä että pikanäppäimet eivät toimi aina (esimerkiksi joskus Eclipse ei ihan tiedä mikä projekti onkaan valittuna joten build-nappi ei toimi ellei valitse Outlinesta/muusta projektinäkymästä projektia). Ja näppäinten "kontekstuaalisuus" on ikävää. Jos minä painan F5, haluan että se käynnistää debugin olen sitten editorissa tai siellä tai täällä. Eclipsen tekijät näköjään eivät tätä oikein halua. En tajua miksi.

Puhumattakaan CDT:n indeksoijan jumittumisista, Intellisense-kopion surkeudesta jne. Joka tapauksessa Eclipsen minullesopimattomuudet, bugit ja misfeaturet pois jättäen, yritänpä päästä itse asiaan eli Carbideen.

UI designer oli kiva idea, mutta omat kokemukseni siitä ovat sellaiset, että helpompi tehdä käsin. Nokia on kovasti puhunut "scalable UIsta" ja vaikka mistä. Enpä sitä Carbidessa näe. Voit lätkiä kontrolleja ruutuun, mutta mitenkäs nyt teinkään sellaisen ruudun jossa kontrollit toimivat oikein kun vaihdan näytön vaa'asta pystyyn? En keksinyt, olenko vain tyhmä? Muutenkin puuttuu paljon asioita joita itse tarvitsen ja designer tuottaa paljon rumaa, turhaa ja tehotonta koodia (kontrollien paikkoja asetellaan ihan turhaan monissa tilanteissa jne).

Debuggeri on käytännössä vitsi. Laitteen kanssa debuggaus toimii monesti, mutta usein ei. N93:ssa pelkkä näytön kääntäminen jumittaa koko systeemin. Ja kun Carbide kaatuu debuggaussessiossa, koko puhelin on jumissa ja pitää repiä akku irti. Myöskään muuttujatietoja ei ole aina saatavilla, muistin luku toimii puolet ajasta jne. Emulaattoridebuggaus taas ei vastaa laitetta yhtään (voisivat miettiä uudelleen tuota emulaattori-nimeä. emulaattori viittaa samaan toiminnallisuuteen, S60 SDK:ssa sellaista ei ole). Debuggerin käynnistys jumittuu noin joka kolmas kerta ja koko Carbide pitää käynnistää uudestaan. Ja luonnollisesti emulaattori pitää käynnistää joka käännöksen jälkeen uudestaan (SDK:n vika kai, ei niinkään Carbiden?)

Käännösvirheet menevät monesti täysin ohi. Carbide kääntää, ilmoittaa että yrittää tehdä SIS-pakettia ja se siitä. Ei virheitä. Sitten ihmettelet miksi paketissa ei olekaan mitään eroa ja huomaat, että konsolissa onkin liuta virheitä jotka Carbide nätisti jätti huomiotta. Hupsista. Itse huomasin viimeksi tämän vasta kun tein projektille clean/build-operaation ja sitten Carbide huomautti että makesis ei löydäkään exeä. Muuten ei huomannut 30 linkkerivirhettä ollenkaan!

Virheitä myös tulee joskus tuplina, joskus virheilmoitus on vain "in xxx.h line 5" tai muuta vastaavaa. Ota näistäkin selvää, helpompaa lukea lokia koko ajan kuin yrittää setviä Problems-näkymään. Puhumattakaan siitä, että se skrollaa kaikissa kolmessa käyttämässäni koneessa aina Warnings-osioon eikä pidä sitä suljettuna vaikka haluaisin. Tietysti voin filtteröidä varoitukset pois, mutta miksi? Kyllä nekin haluan nähdä, mutta ehkä ne virheet ovat tärkeämpiä!

Vistayhteensopivuus on myöskin olematonta. SDK vaatii pari puukotusta että toimii Vistassa, Carbide taas vaatii että se ajetaan XP-yhteensopivuustilassa. Muuten tulee satunnaisia ongelmia, varsinkin debuggeria käynnistettäessä. Mutta eihän se Vista olekaan ollut saatavilla vielä pitkään ja eihän Carbide ole kuin Javaa, joka on täysin alustariippumatonta ja... Myöskään Carbidea ei voi ajaa 64-bittisellä Javalla vaan vaaditaan 32-bittinen. Miksei kukaan ikinä tee softaa joka oikeasti tukisi 64-bittistä JRE:tä? Tiedän, niitä on, mutta tällä hetkellä koneellani olevista Java-softista yksikään ei sitä tue.

Carbiden saa myös jumiin ihan vain lisäämällä ja poistamalla projektiin tiedostoja ja ruksailemalla "muista valintani"-bokseja. Pitää siis opetella toimimaan kuten Carbide haluaa, ei kuten itse haluaisi.

Kaiken kaikkiaan itse mieluummin teen editoinnin Visual Studiolla ja käännän komentoriviltä. Säästää hermoja. Debuggausta jos joutuu tekemään niin sitä ehkä hetken voi yrittää Carbidella. Mutta sekin tuntuu helpommin menevän ihan vain tekemällä lokia tai muuta vastaavaa. Kun debuggauksella harvemmin muutenkaan Symbianissa saa selville mikä on vikana. Jostain vain tulee satunnainen paniikki muttei mitään tietoa miksi.

Eli siis en Carbidesta maksa edes tuota $299 hintaa mitä halvin maksullinen maksaisi. Ihan siksi että se on täysin riittämätön tarpeisiini. Onko se kehittynyt 1.1:stä? On, runsaasti. Mutta vielä ollaan kaukana siitä että minä sitä haluaisin käyttää ja vieläpä maksaa siitä. Katsotaan sitten miten 1.3:n suhteen käy. Paljon on siinäkin lupailtu korjauksia ja parannuksia. Näkee pääseekö beta-ryhmään seuraamaan tilannetta.

Tällä hetkellä muuten Carbide itkee joka käännöskerralla flex-lisenssijuttuja kun poistin betan ja asensin ilmaisen Expressin tilalle. Nokiallakin oli näköjään kai huomattu epäselvyys kaupallisen käytön suhteen kun sivuillaan oikein sanoivat että Express soveltuu kaupalliseen käyttöön myös. Katsotaan jos tapan lisenssitiedostoja josko tuo tuosta tokenisi.

Kommentoi

 
Jutut.fi  |  Omat jutut  |  Muiden jutut  |  Kategoriat  |   kirjaudu