A minap épp egy immutable-nek szánt típust írtam, és nem voltam megelégedve azzal, amit alkottam. Én ugyanis úgy tudtam, hogy a readonly módosító nem használható propertykre a C# nyelvben. Ezt jól is tudtam, azonban ennek következményeként a következő kódot írtam:

public class ImmutableThing {
    public string Somehing { get; private set; }

    public ImmutableThing(string something){
        // This assignment is valid, as desired.
        this.Something = something;
    }

    public void Example(){
        Something = "Unfortunately this is totally valid now, despite my desire to write an Immutable datastructure.";
    }
}

Ez azonban nem csak nekem nem tetszett, de egy kollégámnak sem, aki a review során felvilágosított (az enyémmel egybevágó) aggályáról: a private set bármely metódusból használható a típuson belül. Védelmemre csak azt tudtam felhozni, hogy na igen, de a konstruktorból be kell tudjam állítani, ezért nem lehet readonly. Arra pedig hadd ne írjak readonly mezőket mögé, hogy csak egyszer lehessen értékül adni, inkább majd a reviewkon a jövőben is ilyen alaposak leszünk, és figyelünk. Kiváló kollégám ezt nem tudta elfogadni, de egyből segítségemre is sietett: egy (számomra) újdonságot mutatott a nyelvben!

public class ImmutableThing {
    public string Somehing { get; }

    public ImmutableThing(string something){
        // this assignment is still valid!
        this.Something = something;
    }

    public void Example(){
        Something = "This is now impossible. This line prevents compiling this code! This is what I want!";
    }
}

Jól látható, hogy private set eltávolításra került. A kód azonban így is lefordul! Amennyiben ugyanis egy setter nélküli propertynek akarunk értéket adni, azt csak és kizárólag a konstruktorból tehetjük meg. Ezzel gyakorlatilag a readonly mezőével azonos viselkedést kapunk. Ezzel egyet kihúzhatok a nyelv furcsállott tulajdonságai közül.

Ezek után tudatlanságomra csak egy mentségem van: A dokumentációt olvasva (a cikk írásakori állapotában) nem találtam utalást erre a fontos és releváns működési módra.

Egy ideje a HackerNews oldalt használom, hogy a szilícium-völgyi újdonságok verőerén tartsom ujjamat! Így sosem maradok le az eheti JavaScript Frameworkről (csupa nagybetűvel!), vagy olyan hasznos startupokról, amik lényegét nem értem, de láthatólag nagyon sok embert fellelkesítenek a távoli Kaliforniában.

Volt szerencsém, épp hacker oldalon, az oldal saját görbe tükrét is megismerni. Mindenkinek ajánlom követését, jellegzetes stílusa jól lefesti a hangulatot egy (remélhetőleg) józanabb, külső szemlélő nézőpontjából. Én legalábbis szeretném magam ilyennek hinni, és a heti összefoglalók leírásai gyakran egybevágnak a saját benyomásimmal.

Olvassátok rendszeresen a kiváló n-gate.com. heti szatirikus HackerNews kommentárjait!

Reggeli lapszemlém során egy cikk címétől (The Gender Pay Gap Is Largely Because of Motherhood) 1 perc alatt jutottam el a homeosztázis szóig! Azt vettem észre, hogy még bele sem ittam a kávémba, de már a szótárért kell nyúlnom. Ez bizony a nap szava lesz!

Homeosztázis
főnév, görög eredetű, jelentése “hasonló állapot”. Élő szervezetek valamilyen belső tulajdonságának közel állandóságát jelenti, melyet a szervezet aktív szabályozással tart fenn a külső körülmények változása ellenében is. Ilyen például a testhőmérséklet, vércukorszint, sejtközi folyadék pH értéke.

A szövegkörnyezetből ugyan sejthető volt, hogy valami ilyesmi, bár az csak a testhőmérséklet szabályozását sugallta. Ma is tanultam valamit!

A héten jött szembe velem a NIMBY betűszó, és úgy döntöttem, hogy ma ez lesz a nap szava!

NIMBY
angol nyelvű szófordulat, főnév, A «Not In My Backyard» (nem az én udvaromban) kifejezés rövidése. Olyan emberekre használják, akik valamilyen beruházást, ingatlanfejlesztést próbálnak megakadályozni, különösen úgy, hogy támogatják, egész addig, amíg nem az ő közelükben történik.

Néhány példa Magyarországról

A Budapest körüli körgyűrű (M0 autópálya) építése is részint ilyen okok miatt csúszik.

Környezetvédők, akik megújuló energiát akarnak atomenergia helyett, azonban amikor elkezdik azt építeni, hirtelen már azt sem akarják: Szélerőművek ellenzése a rezgések és a madarakra való hatásuk miatt. A Bős-Nagymaros vízlépcső ellenzése. (Ezzel viszont én is egyetértek: inkább még egy atomerőművet szeretnék, mint a Dunakanyar elcsúfítását.)

A jelenség egy másik formája azok akik támogatnak mindenféle világmegváltó szociális ügyeket, mindig segítenének valakin, csak az a fontos, hogy az épp ne legyen a közelben! A kis helyi ügyek nem érdekesek, a szomszéd néninek a szatyrot felvinni nem segítenének, bezzeg az afrikai gyerekek! Amikor a kegyetlen főváros a hajléktalanokat elzavarja az aluljáróból, akkor tiltakoznak! Amikor hajléktalanszállót nyitna a főváros a szomszédba, akkor is tiltakoznak!

A jelenség fordítottja a mostani atomerőmű ellenesség: A paksi lakosság az atomerőmű közelében (és abból) él. Megtapasztalhatták, hogy nem jelent nagyobb veszélyt rájuk, mint a százhalombattai emberekre a finomító, vagy más nagyobb ipari üzem. Nekik nincs is ellenvetésük az új erőművel szemben, de mások – akik a közelben sem laknak – elvi alapon semmi áron nem akarnak atomerőművet, hiszen az atom a sátán műve (sic!)!

A jelenség világszerte általános, és érthető is, hiszen az emberi természet része a változástól óvakodás. Engem a képmutató formája az, ami nagyon zavar, és mostanában sok példát látni erre a NIMBYzmusra itthon is. Esetenként el is fajul a dolog, volt már olyan esetre példa, hogy a munkásokat megtámadták, a munkaeszközöket megrongálták ilyen tiltakozáson.

Korábban már írtam a RoslynPad nevű eszközről, amit C# kísérletezéshez egész jónak kezdeményezésnek tartok. Előző írásom óta némi tapasztalatot gyűjtöttem a használatáról.

Egyfelől, tudni kell róla, hogy nagyon kezdeti fázisban van még, és ez azon is érződik, hogy a kódszerkesztője kegyetlenül lelassul a kód hosszának növekedésével. Már egy képernyőnyi kódnál érezhetően lagos lesz viszonylag korszerű gépeken is (Hashwell desktop i5, 16Gb memória, ssd). Ennek nem tudom az okát, és egyelőre nem vettem a fáradtságot, hogy utánajárjak.

Ennek ellenére ahogy megismerem, egyre jobban megszeretem. Mostanában a blogomat generáló eszköz lecserélésén töröm a fejem, és ehhez gyűjtök eszközöket. Épp egy MarkDown libraryt próbáltam ki, és gondoltam jó lenne a generált HTML-t megjeleníteni, például egy sima Windows.Forms.WebBrowser kontrolban, azonban nem tudtam, hogy tudnám bereferálni a megfelelő assemblyket. A héten azonban egy számítást végeztünk egy kollégával RoslynPad segítségével, amikor is BigInteger típusra lett volna szükségünk. Ekkor jöttünk rá, hogy lehet rendszer assemblyre hivatkozni. Egyszerűen csak az assembly nevét kell írni a #r direktíva mögé:

#r "System.Drawing"

Ma eszembe jutott, hogy ki kellene próbálni ezt a félbehagyott Markdown kísérletemmel, és próbálkozásomat siker koronázta! Íme:

Screenshot of RoslynPad running code displaying a form with a webbrowser control