Blogista

Olen yrittänyt kirjoittaa sivulleni monenlaisia asioita. Joitakin juttuja olen aikani jaksanut kirjoittaa, mutta suunnitelmani ovat aina olleet hieman liian suuria. Hyvä kirjoittaja tekee pieniä kokonaisuuksia, joista ajan myötä syntyy jotain suurempaa. Tätä sääntöä olen päättänyt jatkossa hyödyntää tällä sivulla, joka tänään muuttui blogiksi.

Blogi muodossa voi kirjoitella asioita, jotka juuri sillä hetkellä kiehtovat minua. Kuten esimerkiksi näinä päivinä erillaiset pythoniin liittyvät asiat tai .Netin maailma.

Tällä hetkellä henkilökohtaisen kiinnostuksen kohteenani on python 3.x kielen mahdollisuudet. Pythonista löytyy pitkälti monet samat jutut kuin c# puolelta. Tässä pieni esimerkki anonyymeistä funktioista.

Python vastaan c#.

Python ja c# eivät oikeasti ole kovin kaukana toisistaan, vaikka niiden syntaksi onkin erillaista. Otetaan esimerkkejä.

esimerkki = lambda x: x*100
esimerkki2 = lambda : 200
tulos = esimerkki(1) + esimerkki2
print(tulos)

esimerkki tarkoittaa samaa kuin

def jokinfunktio(x):
    return x * 100

esimerkki = jokinfunktio(x)
print(esimerkki)

C# puolella tämä sama asia näyttää tältä:

var esimerkki = () => 100;
var esimerkki2 = () => jokintoinenMetodiKutsu();
var esimerkki3 = (int arvo) => arvo *100;

int arvo = esimerkki();
esimerkki();
var arvo = esimerkki(arvo);

Linq:n käyttäminen c# on hienoa. Perus-pythonista itsestään ei löydy suoraan samoja piirteitä, tosin ei Linq alun perin löytynut perus c# puoleltakaan. On kuitenkin olemassa python kirjastoja, joista löytyy äärimmäisen linq-maisia piirteitä. Tällainen on esimerkiksi

https://pypi.org/project/asq/1.0

Perus-pythonissa voi tehdä tietynlaisia operaatioita esimerkiksi listoille.

lista = [1, 3, 5, 6]
laske = [x + 10 for x in lista  if x == 6]
print(laske[0])
lista.sort()
print(lista)
lista.sort(reverse=True)
print(lista)
testi = list(filter(lambda x: x == 6, lista))
print(testi)

Mutta ainakin omasta mielestäni perus-python ei näytä kovin kauniilta verrattuna c# linq koodiin. Mutta otetaan käyttöön asq kirjasto (pip install asq)

from asq import query

def pythonLiq():
    words = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
    tulos = query(words).order_by(len).then_by().take(5).select(str.upper).to_list()
    print(tulos)

Nyt meillä on jo käytössä huomattavasti tutumpi syntaksi.

Python kielenä.

python tarjoaa mahdollisuuksia. Se on skriptikieli, jota voi käyttää niin tyypitetysti (python3) kuin tyypittämättömästikin. Pythoniin voi rakentaa c++ funktiota, jotka toimivat itsenäisinä tai voivat edelleen kutsua python funktioita. Pythonia voi kutsua wrapperiksi c- tyylisen koodin päällä jos haluaa. Mutta käytännössä pythonin hyödyntämismahdollisuudet ovat valtavat.

Heikkoutena pythonissa on että koodi käännetään vasta ajon aikana. Eli tuontanto virhettä ei välttämättä näe ennen kuin asiakas löytää sen, mikä tuo hieman haasteita koodiin testaamiseen etukäteen. Tietyllä tavalla tämä voi olla hyväkin asia, sillä koodi on testattava paremmin käännettävät koodit.

Python maailmassa on suuri joukko erillaisia kirjastoja, joilla voi tuottaa kuvia, pelejä, tehdä android sovelluksia, suorittaa laskutoimituksia. Kaikki on pyritty pakkaamaan tiiviiseen yksinkertaiseen formaattiin, koska python pyrkii oleman yksinkertainen kieli. No, joskus yksinkertaisuus luo todella hankalasti luettavia rakenteita, tunnustetaan.

Python on hyvä kieli monien kielien joukossa. Yhtä tehokas se ei ehkä ole kuin kaupallisemmin luotu c#, jonka suorituskyky teho voittaa python koodin - mutta maailmassa on paljon paikkoja, joissa suorituskyky ei ole kovin tärkeä. Eikä tämä tarkoita, että pythonissa ei olisi suorituskykyä. Se vain ei ole kaikkein suorityskykyisin.

Pythonissa on ominaisuuksia. Interfacet puuttuvat pythonista, koska luokkarakenne on hyvin dynaaminen. Tyypittömyys tuo ominaisuuksia, jotka itsessään korvaavat Interfacen tarpeen tai tekevät koodista hieman vaikeampaa ymmärtää. Lisäksi käsite private on tuntematon pythonissa - korkeintaan metoodien ja funktioiden nimillä voi kertoa olisiko kutsuttava kohde tarkoitettu privaatiksi.

Jokaisessa kielessä on ominaisuutensa.

Itse pidän pythonista kuten c# myös.

Blogini.

Blogini on tarkoitettu ohjelmistokehityksen maailman pohdintaan. En tiedä kuinka usein tätä tulen päivittämään, mutta ainakin toisinaan tulen jotain kirjoittamaan itseäni kiinnostavista asioista. Seuraavia mahdollisia aiheita voisi olla jotain suunnittelu patterista decorator ja ehkä jotain neuroverkoista, joiden kanssa tein joskus töitä. Itseoppiva neuroverkko, jolle ei tarvitse syötellä parametrejä, että se alkaa toimimaan oikein, on mielenkiintoinen asia. Toinen asia taas on kuinka mahdollinen tällainen neuroverkko on muissa ympäristöissä kuin esimerkiksi pelien maailmassa, joissa se on ihan toimiva ratkaisu. Peleillä on kuitenkin rajatut säännöt ja rajattu määrä kriterioita, joiden puitteissa neuroverkko voi itse löytää parametrejään. Rajattu määrä tarkoittaa tässä kohdassa hyvin pientä määrää verrattuna dynaamiseen maailmaan, jossa säännöt saattavat muuttua lennossa.