Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Lua-ohjelmointioppaita YouTubessa

Sivun loppuun

Mahi [09.03.2012 18:20:57]

#

Luasta en vielä sivustolta paljoa löytänyt, joten päätin kirjoittaa omat Lua oppaat... Tai pikemminkin kuvata, sillä teen ne video-oppaina. Oppaissa siis yksinkertaisesti opetetaan Lua ohjelmointia, puhuen mikrofoniin videon päälle. Jos kiinnostaa, niin videot löytyy osoitteesta youtube.com/MahiProductions

Muitakin kieliä aion tulevaisuudessa lisätä, mm. Java ja Android -ohjelmointia (Android ei toki ole kieli, vaan käyttää Javaa ja xml). Mahdollisesti myös Photoshop oppaita tulee, vaikkei ne varsinaisesti ohjelmointiin liitykään.

En ole varma saako täällä mainostaa, mutta en mistään löytänyt asiaa koskevaa kieltoa, joten adminit tuhotkoon, jos on kiellettyä.

-tossu- [09.03.2012 20:04:47]

#

Katsoin oppaasi ensimmäisen osan, ja vaikka en Lualla itse olekaan ohjelmoinut, pisti pari asiaa silmääni.

Videossa oli jonkin verran turhaa epäröintiä kuten "Saaks tästä fonttia vaihdettua?" sekä "Laitoin linkin videon descriptioniin, sano ny mikä se on suomeks... videon kuvaukseen". Mielestäni tällaiset eivät sovi kovin hyvin tutoriaaliin ja syövät uskottavuutta sen suhteen, että tutoriaalisi opettaa ihan kaiken Luasta.

Puhut kommennoista ja arvoista, kun mitä ilmeisimmin tarkoitat funktioita ja parametrejä. Monissa kielissä funktion ja komennon välillä on eroa, ja on tärkeää, että tutoriaalissa käytetään oikeita termejä.

Suomenkieliseen Lua-oppaaseen en ole vielä törmännyt, ja on hyvä, että sellainen on nyt tulossa, mutta harkitsisin silti vielä oppaan tekemistä tekstimuotoon. Tekstistä on nimittäin huomattavasti helpompi etsiä tietoa.

Metabolix [09.03.2012 20:27:13]

#

Katsoin myös pari osaa. Epäröinti syö pahasti uskottavuutta, ohjelmointityylissäsi on paljon parantamisen varaa, ja virheitäkin riittää.

Esimerkiksi funktioiden yhteydessä esität faktana (ja toistat moneen kertaan), että funktiot pitäisi nimetä camelCasella, vaikka mitään tällaista vaatimusta ei ole. Lisäksi käytät funktioissa globaaleja muuttujia. Oletko kuullut local-sanasta? Hieman koomista on myös, että teet videossa ensin melko järkevän funktion mutta siirrät sitten olennaisen osan (syötteen lukemisen) ulos funktiosta, kopioit sen moneen kertaan (mikä onkaan funktioiden tarkoitus?) ja käytät vielä molemmissa kopioissa eri väliaikaismuuttujaa aivan turhaan.

Kaiken kaikkiaan suosittelisin perusteellista suunnittelua ennen videointia, videon leikkaamista sujuvammaksi ja huomattavasti lisää panostusta sekä omiin tietoihisi että oppaiden asioihin ja esimerkkeihin. Video sinänsä ei ole huono idea, mutta lisäksi voisit julkaista käsikirjoitukset ja mallikoodit.

Mutta siitä se lähtee, toivottavasti jaksat pyrkiä eteenpäin.

Mahi [09.03.2012 21:34:32]

#

Kiitos molemmille vastauksista!
-tossu-:lle vastaus tuohon komennoista ja arvoista puhumiseen tulikin jo Metabolixin viestissä, myöhemmin siis puhun jo funktioista ja parametreistä.
Huomatkaa, että oppaiden on tarkoitus olla vasta-alkajille suunnattujat. He eivät siis tiedä ohjelmoinnista mitään. Suurin osa katsojista varmaan luovuttaisi heti, jos ensimmäisessä videossa selittäisin funktioista ja parametreistä, periytymisestä ja metataulukoista, eikö? Kerron kyllä paikallisista muuttujista ja funktioista enemmän aikanaan, mutta tieto pitää syöttää pikku hiljaa aloittelijoille, ei liikaa kerralla.

Epäröinnin otan paremmin huomioon tästedes. Nämä tosin ovat ensimmäisiä videoitani, joten toivon että kehityn pikkuhiljaa, mutta kiitos että huomautitte. Koitan valmistautua tästedes paremmin.

Funktiot pitäisi nimetä camelCasella. Ihan vaan käyttäjien itsensä takia, se on yleinen käytäntö. Kehittyessään he oppivat, ettei asia aina näin ole, mutta alkuun kannattaa kertoa selvät ohjeet, vaikka ne olisivatkin vähän väärin, jotta vältytään "TOSIKOVATAPPAJAfunktio" nimiltä. Muistelehan omaa koulunkäyntiäsi, mitä enemmän sinulle opetetaan, sitä enemmän tajuat, että sinua on huijattu ala-asteella :)

Siirrän myös syötteen lukemisen ulos funktiosta vain näyttääkseni kuinka parametrien näkyvyys toimii. Ihan opetus mielessä siis. Katsokaa videoita vasta-alkajan silmistä, tarkoitus ei ole tehdä tehokkainta ja täydellisintä ohjelmaa, vaan selittää asiat pikkuhiljaa oppimattomille.

Mallikoodit tulee myöhemmin, kun hieman isompia juttuja väsätään, ei vielä ole mitään kunnon koodeja ollut edes.

Muuten kumoan väitteenne, mutta painan tuon epäröinnin takaraivoon, vielä on paljon oppimista! Kiitos palautteesta :)

Antti Laaksonen [10.03.2012 00:06:45]

#

Hienoa, että olet alkanut tehdä videotutoriaaleja. Nykyiset videot ovat periaatteessa mainioita, mutta tosiaan tällä hetkellä tulee sellainen vaikutelma, että et ole suunnitellut kovin paljon videoiden sisältöä ennen nauhoitusta.

Ensimmäisessä videossa mainitset, että "tarkoituksena on opettaa kaikki mahdollinen Luasta". Tällaista ei kannata luvata, koska et pysty mitenkään täyttämään lupausta.

Tutoriaaleissa saa tietenkin yksinkertaistaa asioita, mutta yritä välttää antamasta väärää tietoa. Esimerkiksi voit mainita, että camelCasen käyttäminen on hyvä tapa, ja käyttää camelCasea kaikissa omissa funktioissasi. Mutta ei ole hyvä antaa sellaista kuvaa, että camelCasea on pakko käyttää.

Triton [10.03.2012 00:16:46]

#

Mahi kirjoitti:

Siirrän myös syötteen lukemisen ulos funktiosta vain näyttääkseni kuinka parametrien näkyvyys toimii. Ihan opetus mielessä siis.

Mielestäni ei todellakaan ole fiksua esitellä vasta-alkajille globaaleja muuttujia. Vähän sama kuin opettaisi C-kielen aloittavalle goto-lauseen käytön.

Mikä minua taas häiritsi oli 11. oppaassa, kun puhut for-silmukasta. Sanot, että "for-silmukassa on muuttuja, joka vaihtuu joka kierroksella" kuin oikeammin olisi sanoa, että "jonka arvo vaihtuu joka kierroksella". En nyt halua sen pahemmin saivarrella, mutta kun kerran painotit oppaiden olevan juuri aloittelijoille, niin eikö silloin kannattaisi selittää asiat mahdollisimman eksaktisti oikein? Noilla kahdella lauseella on mielestäni aika merkittävä ero. Myöskään i-muuttujan käyttö forissa ei oikeastaan ole edes millään tavalla oletus. Tiedätkö muuten, mistä i:n käyttö on alun perin peräisin?

Edit. Miksköhän hitossa Luassa taulukoiden indeksointi alkaa ykkösestä? O.o

Grez [10.03.2012 00:25:15]

#

Triton kirjoitti:

Tiedätkö muuten, mistä i:n käyttö on alun perin peräisin?

Kerro ihmeessä! Iterator? Integer? Index? Yksikkövektoreiden kirjaimet?

Triton [10.03.2012 00:27:59]

#

Ihan kuin aistisin tässä pienen v*ttuilun sävyn :D

Grez kirjoitti:

Yksikkövektoreiden kirjaimet?

Niinkö meinaat?

Grez [10.03.2012 00:32:19]

#

No jos yleinen tapa on käyttää sisäkkäisissä foreissa i, j, k niin en todellakaan osaa sanoa mistä noi on oikeasti lähtöisin. Yritin jopa googlettaa. Eli jos sulla on faktatietoa asiasta, niin olisi kyllä kivaa triviaa tietää.

Nyt löysin tähän mennessä parhaan teorian: Matematiikasta summamerkinnän tyypilliset summausindeksit. Tosin tämä ei vielä selitä sitä miksi nämä kirjaimet on valittu siihen. Ehkä indeksi on lyhennetty i:ksi ja siitä sitten aakkosissa eteenpäin.

Triton [10.03.2012 00:36:30]

#

No tästä aiheesta yhden alan ammattilaisen kanssa (akateeminen tausta) olen keskustellut ja hän oli hyvin vahvasti sitä mieltä, että juuri vektoreista tämä olisi peräisin... Toisaalta koska vektorit ovat takuulla ollut ennen for-silmukoita, niin mielestäni tämä vaikuttaisi varsin selvältä yhteydeltä. Mutta joo ymmärsin pointtisi 100% varma asiasta ei kuitenkaan voi olla.

Edit. Itseasiassa tuo voi olla kyllä mahdollista, että se liittyy myös tuohon isoon sigmaan eli summa-merkintään...

Edit1. Ja nyt musta tuntuu, että tää keskustelu taas karkaa lapasesta :D

Mahi [10.03.2012 00:48:16]

#

Kiitoksia Antti palautteesta, koitan huomioida nuo seikat tästedes paremmin :)

Triton kirjoitti:

Mielestäni ei todellakaan ole fiksua esitellä vasta-alkajille globaaleja muuttujia. Vähän sama kuin opettaisi C-kielen aloittavalle goto-lauseen käytön.

Mikä minua taas häiritsi oli 11. oppaassa, kun puhut for-silmukasta. Sanot, että "for-silmukassa on muuttuja, joka vaihtuu joka kierroksella" kuin oikeammin olisi sanoa, että "jonka arvo vaihtuu joka kierroksella". En nyt halua sen pahemmin saivarrella, mutta kun kerran painotit oppaiden olevan juuri aloittelijoille, niin eikö silloin kannattaisi selittää asiat mahdollisimman eksaktisti oikein? Noilla kahdella lauseella on mielestäni aika merkittävä ero. Myöskään i-muuttujan käyttö forissa ei oikeastaan ole edes millään tavalla oletus. Tiedätkö muuten, mistä i:n käyttö on alun perin peräisin?

Edit. Miksköhän hitossa Luassa taulukoiden indeksointi alkaa ykkösestä? O.o

En lähinnä esitellyt globaaleja muuttujia, vaan parametrejä, jotka ovat kaikkea muuta kuin globaaleja, siinä samalla tuli toki esille nuo globaalit muuttujat, mutta en varsinaisesti esitellyt niitä :)
Pyydän anteeksi tuota for-silmukan muuttujaa, ihan inhimillinen virhe puheessa, enpä edes huomannut tuota ennenkuin mainitsit, koitan tarkistaa paremmin tästedes.

Ja kyllä se i aikalailla oletus on, toki voit käyttää mitä haluat, mutta useimmiten käytetään i, ei se mikään sääntö ole, se on vain tapa. Eikä sillä mielestäni mitään väliä ole opetuksen kannalta, että mistä tuo i, j ja k tulevat, vai?

Ja tuota indeksointia olen välillä itsekin ihmetellyt, vastoin kaikkia ohjelmoinnin periaatteita, mutta minkäs teet, ainahan voit määritellä käsin [0] = "blabla", joka on tosin typerää. Siinä jollain välähtänyt taas, laitetaampa taulukot alkamaan ykkös indeksistä.

Antti Laaksonen [10.03.2012 01:00:14]

#

Mahi kirjoitti:

Ja tuota indeksointia olen välillä itsekin ihmetellyt, vastoin kaikkia ohjelmoinnin periaatteita - -

Itse asiassa historiallisesti katsottuna ykkösestä indeksointi on tavallinen tapa ja nollasta indeksointi on poikkeus. Ohjelmoinnin alkuaikoina kielet Algol, Cobol ja Fortran olivat valta-asemassa, ja kaikissa niissä indeksointi alkoi ykkösestä. Voisi sanoa, että nollasta indeksointi on muotisuuntaus, johon on vaikuttanut merkittävästi C-sukuisten kielten suosio.

Mahi [10.03.2012 01:10:43]

#

Antti Laaksonen kirjoitti:

Mahi kirjoitti:

Ja tuota indeksointia olen välillä itsekin ihmetellyt, vastoin kaikkia ohjelmoinnin periaatteita - -

Itse asiassa historiallisesti katsottuna ykkösestä indeksointi on tavallinen tapa ja nollasta indeksointi on poikkeus. Ohjelmoinnin alkuaikoina kielet Algol, Cobol ja Fortran olivat valta-asemassa, ja kaikissa niissä indeksointi alkoi ykkösestä. Voisi sanoa, että nollasta indeksointi on muotisuuntaus, johon on vaikuttanut merkittävästi C-sukuisten kielten suosio.

Nyt kun mainitsit niin olen tainnut tuosta Cobolin indeksoinnista kuulla ennenkin... Omituista, jotenkin aina kuvitellut Luan olevan lähes ainut kieli jossa tätä indeksointi tyyliä käytetään.

Triton [10.03.2012 10:27:06]

#

Antti Laaksonen kirjoitti:

Mahi kirjoitti:

Ja tuota indeksointia olen välillä itsekin ihmetellyt, vastoin kaikkia ohjelmoinnin periaatteita - -

Itse asiassa historiallisesti katsottuna ykkösestä indeksointi on tavallinen tapa ja nollasta indeksointi on poikkeus. Ohjelmoinnin alkuaikoina kielet Algol, Cobol ja Fortran olivat valta-asemassa, ja kaikissa niissä indeksointi alkoi ykkösestä. Voisi sanoa, että nollasta indeksointi on muotisuuntaus, johon on vaikuttanut merkittävästi C-sukuisten kielten suosio.

Onhan tämä sinänsä selvä asia, mutta tuossa Luan tapauksessa ihmetyttää se, että käytössä on kuitenkin nollas alkio erikseen määriteltynä...

neau33 [10.03.2012 10:31:35]

#

Hienoa Mahi!

Kiinnitä jatkossa enemmän huomiota suunnitteluun eli tee ensin käsikirjoitus ja opiskele se. Kun teet varsinaista nauhoitusta niin älä pidä mitään kiirettä (et ole tekemässä "suoraa lähetystä"). Jos epävarmuus iskee niin pysähdy miettimään ja jatka vasta, kun saat juonesta taas kiinni.
Sitten, kun kaikki matsku on viimein "purkissa" niin editoimaan (näin toimivat myös ammattilaiset).

Mahi [10.03.2012 11:19:55]

#

neau33 kirjoitti:

Hienoa Mahi!

Kiinnitä jatkossa enemmän huomiota suunnitteluun eli tee ensin käsikirjoitus ja opiskele se. Kun teet varsinaista nauhoitusta niin älä pidä mitään kiirettä (et ole tekemässä "suoraa lähetystä"). Jos epävarmuus iskee niin pysähdy miettimään ja jatka vasta, kun saat juonesta taas kiinni.
Sitten, kun kaikki matsku on viimein "purkissa" niin editoimaan (näin toimivat myös ammattilaiset).

Kiitoksia vinkistä Nea, yritin parantaa uusimpaan tutoriaaliini, ei ehkä täydellinen vielä, mutta tehdessä sitä oppii! :)

Metabolix [10.03.2012 15:14:36]

#

Triton kirjoitti:

Onhan tämä sinänsä selvä asia, mutta tuossa Luan tapauksessa ihmetyttää se, että käytössä on kuitenkin nollas alkio erikseen määriteltynä...

Mikä siinä ihmetyttää? Luan taulu (table) ei ole taulukko (array) vaan kuvaus (map). Siinä voi käyttää avaimina tekstejä tai vaikka toisia tauluja.

Triton [10.03.2012 15:46:05]

#

No silloin olisi syytä erotella termit eikä puhua asioista ristiin...

Grez [10.03.2012 15:49:31]

#

Jos häiritsee, niin valitapa sitten aiheesta tuonne Luan dokumentaation laatijoille.

lainaus:

2.5 Tables
a = {} -- create a table and store its reference in `a'

11.1 – Arrays
a = {} -- new array

Tulkitsisin kuitenkin Metabolixin viestin niin, että luan tablet ei ole sisäisesti monissa kielissä tyypillisiä arraytä vaan mappeja.

Triton [10.03.2012 15:56:25]

#

Esimerkiksi PHP:ssä array()-funktiolla määritellyt taulukot toimivat käytännössä samalla tavalla kuin Luan taulu-rakenne eli map-rakenne eli assosiatiivinen taulukko -rakenne ja siitä huolimatta sen indeksointi alkaa nollasta.

Metabolix [10.03.2012 15:59:12]

#

Grezin jälkimmäinen linkki: "We implement arrays in Lua simply by indexing tables with integers."

Triton kirjoitti:

Esimerkiksi PHP:ssä ... indeksointi alkaa nollasta.

Entä sitten? PHP:ssä on myös C-kielestä periytyvä for-silmukka, jolla on luontevaa käydä indeksit läpi nollasta alkaen. Luan for-silmukka taas sopii luontevammin ykkösestä alkaviin taulukoihin:

print("Taulukossa on " .. #t .. " lukua:")
for i = 1, #t do print(t[i]) end

On aika turhaa väittää suuntaan tai toiseen siitä, mistä taulukon "pitäisi" alkaa. Eri ratkaisuissa ei ole ohjelmoinnin kannalta mitään eroa. Käytännöllisyys koodissa riippuu kielen muista rakenteista (kuten for-silmukan syntaksista). Jos jokin indeksi tuntuu hirveän vaikealta ymmärtää, kannattaa etsiä vikaa ensin omasta päästä.

Luonnollisissa kielissä numerointi alkaa ykkösestä eikä nollasta, ja ohjelmoinnissakin on aloittelijan on siksi ehkä helpompi ymmärtä, että ensimmäinen indeksi on [1] ja toinen [2].

Grez [10.03.2012 16:12:43]

#

Triton kirjoitti:

Esimerkiksi PHP:ssä array()-funktiolla määritellyt taulukot toimivat käytännössä samalla tavalla kuin Luan taulu-rakenne eli map-rakenne eli assosiatiivinen taulukko -rakenne ja siitä huolimatta sen indeksointi alkaa nollasta.

Ja kun Mahi ihmetteli että sinne Luan taulukkoon voi itse lisätä [0]:n niin myös PHP:ssä voi lisätä sinne sen -1:n.

Metabolix kirjoitti:

On aika turhaa väittää suuntaan tai toiseen siitä, mistä taulukon "pitäisi" alkaa.

Varmaan juuri sen takia esim. VB:ssä sai koodaaja itse valita.. Option Base 0 tai Option Base 1 :D Tosin siinähä sai muutenkin valita arrayn (joka ei siis ollut map) alku- ja loppuindeksin, eli vaikka Dim Arvot(-58 To 277) As String

Pekka Karjalainen [10.03.2012 17:53:04]

#

Grez kirjoitti:

Tulkitsisin kuitenkin Metabolixin viestin niin, että luan tablet ei ole sisäisesti monissa kielissä tyypillisiä arraytä vaan mappeja.

No, jos ihan tarkkoja ollaan, Luan tablessa on versiosta 5.0 lähtien sekä hajautustaulu- että taulukko-osa. Taulukkokäytössä tablen sisäinen toiminta vastaa siis enemmän arrayta kuin mappia. Toteutusta kuvataan tarkemmin tässä julkaisussa.

http://www.lua.org/doc/jucs05.pdf (PDF)

Lyhyesti: Jos käyttää tarpeeksi tiheässä olevia kokonaislukuavaimia, Luan toteutus tallettaa tablessa näitä kokonaislukuavaimia vastaavat tiedot sisäisesti taulukkoon. Se mm. säästää muistia, koska avaimia ei tarvitse erikseen tallettaa. Samassa tablessa voi olla tarpeen mukaan molemmat osat, sekä hajautustaulu että taulukko.

Metabolix [10.03.2012 17:57:55]

#

Pekka Karjalainen kirjoitti:

No, jos ihan tarkkoja ollaan, Luan tablessa on versiosta 5.0 lähtien sekä hajautustaulu- että taulukko-osa.

Sisäisesti kyllä, mutta Lua-ohjelmoijalle tästä ei näy mitään merkkejä (paitsi parempi suorituskyky sopivilla avaimilla), eli varsinaisesti Luassa kielenä ei ole kuin yksi rakenne.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta