Näytetään tekstit, joissa on tunniste ohjeet. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste ohjeet. Näytä kaikki tekstit

24 joulukuuta, 2014

Todellinen datatyyppi

Muuttujan arvon datatyyppi

Ongelma ja ratkaisu

Kuinka voi selvittää mikä muuttujan arvon todellinen datatyyppi, riippumatta siitä, miten se on muodostettu? Normaalisti tämä on ihmeellisen hankalaa JavaScriptissä, sillä esimerkiksi numeron voi luoda kahdella tavalla: 

var n = 2; 
var N = new Number(2);

Molemmat ovat kakkosia ja molemmilla voi laskea aivan normaalisti, mutta jos niitä vertaa keskenään ne ovatkin ihan eri asioita:

if ( n === N ) { // jne

Saa vastaukseksi false. Miksi? Koska toinen on primitiivi ja toinen on objekti. 

Yksi ratkaisu olisi tietty käyttää löysempää vertailua, joka kääntää molemmat arvot samaan tyyppiin ennen vertailua, mutta silloin samalla luo potentiaalisesti vaarallisen tilanteen, jossa saman numeroarvon omaavaa muuttujaa ovat aidosti erilaisia datatyypiltään. 

if ( n == N ) { // jne

Sama ongelma käänteisenä on Objektin ja Arrayn välillä: jos kysyt typeof sanalla:

var MyArr = [];
var MyObj = {};
if ( ( typeof MyArr ) === ( typeof MyObj) ) { // true !

Molemmat ovat tyyppiä object, vaikka ne pitäisi nimenomaan pystyä helposti erottamaan toisistaan. Ja samaa tyyppiä ovat myös Date, RegExp ja Math jne...

Hämmentävä perusongelma JavaScriptissä on syntynyt pitkän historian aiheuttamana, mutta ratkaisukin on kuitenkin jo olemassa. Ongelma pitää vain tiedostaa: Toisaalta pitäisi erotella sen mukaan mitä datatyyppiä on sisällä, ja unohtaa ulkoinen objektin tyyppi, toisaalta yleensä eri objektityypit (ainakin Array ja Object ) pitäisi erottaa toisistaan selkeästi. Mitä tehdä? 

Vastaan: Pitää luoda funktio, joka kertoo datan oikean tyypin.

Ratkaisu on realDataType -funktio

Se yksinkertaisesti kertoo mitä dataa sille syötetään. Ensin switch tarkistaa, ettei arvo ole jokin tyhjistä (null tai undefined) , sitten katsotaan vain tyypin prototyyppi, ja halutessa (asettamalla toinen parametri true -asentoon) tarkistetaan Number -primitiivi vielä tarkemmin sen mukaan onko kyseessä kokonaisluku vai liukuluku. 

Lisäksi samalla voidaan tarkistaa onko luku käypä numero. Jos arvo on NaN tai se on liian suuri tai pieni, tyypiksi tulee jotain muuta kuin Number, mikä mahdollistaa helpon testin. Tämä on kuitenkin tehty optioksi, jonka saa halutessaan käyttöön true -lisäparametrilla.

var realDataType = function (val, separateNumbers) { /* 'real' datatypes */
 var sn = ( separateNumbers || false); 
 switch (val){
  case undefined: return "undefined";
  break;
  case null: return "null";
  break;
 default:  
var proto=Object.prototype.toString.call(val).match(/^\[object (.+)\]$/)[1];
  if("String" === proto) {
return (/^(0x|0X|#)[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(val))?"Hex":"String"; 
  } // string
  if("Number" === proto){
   if (isNaN(val)) return "NaN"; // epäluku
   if (isFinite(val) || (val < Number.MAX_VALUE && val > -Number.MAX_VALUE)) { //"ok";
    if (sn) {
      return (val % 1 === 0) ? "Integer" : "Float"; 
    }else{
      return "Number";
    }
   } else { // too big or small:
    if ( val > Number.MAX_VALUE) {
     return "Infinity";
    } else if (val < -Number.MAX_VALUE){
     return "-Infinity";
    };
   };
  }else {
    return proto;
  }
 }; //switch end
};

alert( realDataType( Number.MAX_VALUE )); // Number
alert( realDataType( Number.MAX_VALUE, true )); // Integer
alert( realDataType( Number.MAX_VALUE * 2 )); // Infinity
alert( realDataType( "#00FF00" )); // Hex
alert( realDataType( /[a-zA-Z]/ )); // RegExp

Ohjelmoitu nörtin joululahja

Samalla logiikalla lisäsin vielä merkkijonon tunnistamisen hexadesimaaliksi.
Suosittelen: ota tästä kätevän ilmainen työkalu ohjelmoijan pakkiin. Jos tunnet jonakin päivänä olevasi kiitollisuudenvelassa, ota yhteyttä, lähetän tilinumeroni. Ei, olkoon tämä minun joululahjani koko ohjelmoivalle maailmalle.

Olen itse surfannut vuosien varrella melkoisen paljon ilmaisia ohjeita läpi, päätyäkseni tähän ratkaisuun ja muillakin vastaavia ratkaisuja on olemassa jo valmiina, mutta niissä ei sama funktio tutki esim. numeroita näin pitkälle.
Joten olkaapa hyvä ja mukavaa uutta vuotta!
On siinä varmasti vielä kehittämisen varaa, jos keksit, kerro minullekin. 

Float vai Real?

Oli vaikea päättää tätä: Float tarkoittaa liukuluku, oikeastaan se on kuitenkin Real eli reaaliluku, mutta onko se sitten amerikkalaista kulttuuria vai mitä, mutta tuntuu tutummalta käyttää tätä, en tiedä, voin olla väärässäkin.

Tulevaisuuden perusta on tässä

Funktio toimii todennäköisesti myös kaikkiin tulevaisuudessa kehitettäviin uusiin datamuotoihin. Tässä esimerkki, jota en vielä kehitellessä hoksannut ottaa testattavaksi, mutta sieltähän se datatyyppi tulla tupsahtaa. Arguments ei siis ole tyypiltään Array. Vaikka se osittain osaakin samoja temppuja, ei kuitenkaan kaikkia.

var b = function (a){
alert(realDataType(arguments)); // Arguments
}();

29 tammikuuta, 2010

Pakastearkun järjestäminen best practice



Kuinka pakastin sulatetaan oikein? 

Sulata pakastin tammi-helmikuussa kun on kovimmat pakkaset. Kaikki vaan lainalaatikkoon (tai jos ei ole muovisäkkiin) ja ulos. Peitä laatikko, ettei lumi sada sisään tai elukat pääse apajille.
Jätä sitten pakastimesta luukku auki. Ilman sähköjä jätetään sulamaan yön yli. Älä rupea raaputtelemaan jäitä irti, pakastin menee pilalle, rikot herkän pinnan ja palellutat sormesi. Anna sen sulaa rauhassa. 
Seuraavana päivänä, tai kun kaikki on sulanut vedeksi, tyhjennys ja pesu. Jos pohjassa on korkki sen voi avata ja vedet valuu lattialle. Katso käyttöohjeista, voi olla joku tyhjennysletku tms.  Kuivaus pehmeällä liinalla. Suihkaus käsidesiä tappaa loputkin mikrobit. Siirrä tyhjä pakastin paikaltaan ja imuroi nyt samalla sen takaa vuoden (parin) pölyt pois ja pese lattia. 
Pakastin paikalleen ja takasin kylmäksi (virrat päälle). Koska paketit ovat jääkylmiä pakastimen kylmeneminen ei kestä tosiaankaan kovin kauaa, joten sähkön säästö  on mojova. 
Palkitse itseäsi jollain hyvällä, olet sen ansainnut. Olet nimittäin tehnyt niin kuin tehdä pitää, jos pakastimen omistaa. Ja miksei omistaisi auttaa se vaan. 

Laita rasiat perälle, ne on kauimmin säilytettäviä, tee niistä muistio: Milloin pakastettu kuinka paljon mitäkin ja miten esikäsitelty. Arvioi viimeinen käyttöpäivä tai parasta ennen ja merkkaa se kalenteriin.

Järjestys on siis tämä ja sitä ei voi kyseenalaistaa, ellei tiedä paremmin: 
Pahvilaatikot keskelle alas, mielellään niin että näkee mitä niissä on.
Näitä siis tarvii usein ja vaihtuvuus on nopea. Pizzaa, kebabia, nugetteja, kalapuikkoja yms. Laatikot voi myös olla isokokoisia, joten ne tähän keskelle, mihin mahtuu. Laatikot pysyy päällekkäinkin järjestyksessä, ei siis pusseja tänne sekaan. 
Jos joskus pitää äkkiä jäähdyttää jotain, laatikoiden päälle saa melkein tasaiselle alustalle ehkä asetettua vaikka kulhon. Ei muuten onnistu, jos laatikoiden välissä on pusseja tai laatikot on sikin sokin sekasin.
Pussit siis siksi ja sitä varten, erikseen yläkoreihin. On sitä paitsi huomattavasti paljon selkeämpää katsoa pussipinosta, mitä siellä on kun seassa ei ole laatikoita.
Toiseen koriin vihannekset ja ranskanperunat yms. (vasemmalle) 
Toiseen koriin kala ja liha, katkaravut yms.  (oikealle)
Ylähyllylle omaan rauhalliseen kolkkaansa kylmäkallet ja jääpalat.

VINKKI:
Ota pakastimen sisällöstä usein kuva digikameralla ja näytä sitä sille, joka haluaa kurkistella pakastimeen ihan  uteliaisuudesta, että onko siellä mitään... Voit myös ihan itse katsoa kuvasta ja palauttaa asioita mieleesi kantta availematta. Planeetta pelastetaan siis digikameralla.
Kun kuva on otettu silloin kun järjestys oli uusi ja siisti, se herättää jatkossakin mielikuvia siitä että pakastimen pitäisi aina näyttää siistiltä.
Eikä siis siltä lumiselta sekametelisopalta mikä se oli ennen sulatusta ja siivousta.

Yleiset käyttöohjeet 
Pidä luukkua auki aina vain muutama sekunti, jotta ilma ei ehdi kokonaan vaihtumaan. Ota koko kori ulos ja pengo ulkopuolella, laita vasta sitten takasin. Järjestys on juuri siksi hyvä että voi minimoida luukun aukaisut. Joissakin pakastimissa on lukko, jos on, käytä iheessä. 
Laita pakastin heti lukkoon ja pidä avain itselläsi. Se voi ihan oikeasti auttaa asiaa jos jälkikasvu on kovin paksukalloista lajia.
Kyse ei ole siitä että lapsia yritetään näännyttää nälkään. Jos lapset kykenevät itse ottamaan ruokaa pakastimesta ne eivät näänny nälkään. Valitse siis kahdesta pahasta se pienempi paha ja opeta lapsille mitä on asioista huolehtiminen ja vastuun kantaminen. Vastuusi on kantaa valtaa päättää siitä milloin pakastimen kansi avataan. Jos siis olet sadistista sorttia, anna se avain muille, jos ne ovat vähemmän sadistisia. 
Pelasta planeetta lapsille 
Kerro lapsille miksi pakastinta ei saa turhaan aukoa. Pakkasukko nimittäin pääsee joka kerta silloin karkuun ja tulee talvella takaisin nipistelemään varpaista. Siis siten säästetään melkoinen määrä energiaa ja niin ollen tehokkaasti hidastetaan jäätiköiden sulamisnopeutta ja meren pinnan nousunopeutta. Ja asiasta voi jatkaa ihan vaan muihin ajatuksiin pääsemiseksi että usko tai älä, mutta vielä enemmän vaikuttaa se että jokainen ottaa ruokalusikallisen enemmän kasviksia jokaisella aterialla ja etenkin se että kaikki istuu syömään yhtä aikaa, eikä tee mitä sattuu mikroruokia kukin eri aikoihin. Lapsi ymmärtää energian kulumisen helposti kun verrataan, pakastimen kylmeneminen tarvitsee energiaa suunnilleen saman verran kuin kuluu parin tunnin polkupyöräreissulla jos koko ajan ajetaan ylämäkeen.


On muuten monia ruokalajeja joihin kuuluu pikainen pakastus. Yleensä pakastin on kovimmillaan ja kuluttaa eniten sähköä aina juuri siinä tilanteessa kun sinne pistetään kilo tai pari jotakin huoneenlämpöistä. Näiden valmistus on ekologista, helppoa ja hauskaa juuri kovilla pakkasilla. Joten tee niitä nyt samalla ja ota pakkasista kaikki hyöty irti. 

Tee kynttilälyhtyjä ämpäreillä ja saaveilla ja pidä kunnon pakkasjuhlat.




27 syyskuuta, 2009

CoreSWF luokkakirjastot ja Xcode




Kuinka lisäät jaetut ActionScript 3 -luokat Xcode -ympäristössä.

Jaettu luokkakirjasto on siis se paikka, mihin voit kerätä yleistä hyödyllistä koodia, niin ettei sitä tarvitse kopioida jokaiseen projektiin erikseen.

Core SWF paketissa, josta luot projektisi on xml tiedosto nimeltään build.xml.

Avaa se ja lisää sinne tällainen rivi:
 <property name="CLASSES_HOME" location="/Users/OMA_TUNNUS/Documents/Xcode/luokat"/>

Parametrin location= pitää tietysti osoittaa sinne, missä sinun oma luokkakirjastosi oikeasti on, joten muista vaihtaa OMA_TUNNUS.
Itselläni luokkakirjasto sijaitsee Dokumentit / Xcode kansiossa ja on tavallinen kansio nimeltä luokat,
Sen sisällä on sitten nippu kansioita jotka ovat kaikkien projektien kesken jaettavissa, esim: caurina, asunit, fi, com, org jne…

build.xml alkupää on nyt siis tämän näköinen:

version="1.0" encoding="UTF-8"?>
<project name="«PROJECTNAMEASIDENTIFIER»" default="build" basedir=".">
<property name="FLEX_HOME" location="/Developer/SDKs/flex4.sdk"/>
<property name="src" location="src"/>
<property name="lib" location="lib"/>
<property name="dist" location="dist"/>
  <property name="CLASSES_HOME" location="/Users/OMA_TUNNUS/Documents/Xcode/luokat"/>


<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />


Nyt voit luoda Xcode:ssa uuden projektin ja tästä lähtien jokaisessa uudessa projektissasi
voit viitata suoraan haluamaasi jaettuun kirjastoon.

esim näin:

package src {
import caurina.*; // tuo animaatiokirjaston projektiin
import.com.dejavu.omat.*; // omat koodit jotka jaetaan useisiin projekteihin



26 toukokuuta, 2009

Epälineaarisen tarinan aloittaminen

Mistä se (mitä tässä ollaan tekemässä) alkaa? 


Miten sinä löysit elämäsi vaikuttavimman tarinan?


Ahaa, tuossahan on tuommoinen...  Onko se mainos, linkki, flyeri, vai mikä? ...ja joku kiinnostuu näkemästään niin paljon, että seuraa johtolankaa kunnes saa selvän mistä oikein on kyse, ja lopulta jos kaikki on mennyt hyvin (tarinan kannalta), seuraa jopa sinne asti että miten se tarina päättyy. 


Jos tarina on hyvä ja tehnyt vaikutuksen se joku saattaa miettiä sitä jonkin aikaa, ehkä palata takaisin, ehkä suositella jollekulle, joskus oikein mestarillinen tarina tekee ihmiseen jopa koko elämän mittaisen vaikutuksen. Tai päätyy vaikka klassikoksi johon palataan sukupolvesta toiseen. 


Keskellä sitä kaikkea, aivan kuin se olisi odottanut...


Tekijän näkökulmasta homma alkaa jo paljon aiemmin. Siis jo sieltä missä se ei ole vielä alkanut. Esim sieltä missä se mainos, linkki tms. sijaitsee.  On olemassa jokin tausta tai ympäristö, jossa kerronta tulee tapahtumaan / alkamaan... ja sieltä se pitäisi siis sitten jotenkin erottua ja se pitäisi edes huomata. 


Sen ihan ensimmäisen vaikutelman pitäisi heti kertoa jotakin siitä mistä kokonaisuudessa on kyse. Se herättää nimittäin odotuksia, ja sen teoksen olisi sitten vastattava niitä odotuksia edes jotenkin. Jos odotukset on liian korkealla, seuraa pettymys. Jos taas annetaan odottaa liian vähän, on oltu turhan vaatimattomia.


Näkymättömät bussissa


Tosikertomuksessa kaksi kaveriani istuivat bussissa,  tavallisessa aamuruuhkabussissa menossa töihin, niinkuin joka aamu. He eivät paljastaneet kenellekään tuntevansa toisiaan, nousivatkin eri pysäkeiltä. Melkoisen rykimisen jälkeen toinen heistä ilmaisi olevansa janoinen, "Aaargh, olisipa lasi vettä. Ja toinen taas siihen että "saisiko olla lasi raikasta vettä? Ehkä semmoinen jossa on oikein jäitä?" - Todellako? Kyllä kelpaisi semmoinen. Ja niinpä kaveri ottaa povitaskustaan lasillisen vettä, jossa on mukavasti jäitäkin. Onnellisena janoinen juo veden ja palauttaa kiitollisena lasin vierustoverilleen, joka sujauttaa sen takaisin taskuunsa. Ja bussimatka jatkuu muuten normaalisti. Ehkä pitää kuitenkin tässä yhteydessä mainita, että toinen kaveruksista tuli myöhemmin kuuluisaksi Luikuri Tattisena, eli Taikuri Luttisena. Eli kaverit olivat jo tuolloin esiintymisen ammattilaisia. 

Tässä kokeiltiin niin sanottua näkymätöntä teatteria, jossa esityksen yleisö ei siis välttämättä koskaan oivalla tai tiedosta nähneensä esityksen. Ympäristönä toimii arkinen tilanne ja tarkkaavainen katsoja tunnistaa esityksen elementit esim liioitellun kohteliaasta dialogista ja yllättävästä käänteestä. Mutta ehkä voi myös olla että joillekin koko homma jäi mysteeriksi: Noin voi siis tapahtua ihan oikeasti, että jollakin nyt sattui olemaan lasi vettä taskussa.


Kehystys erottaa jotakin jostakin


Piilomainonta pyrkii sulautumaan tekstiin kokonaan. On lain mukaan väärin, jos mainos ei erotu varsinaisesta asiasta, sillä mainonnan tehtävä on yksinomaan kaupallinen. Asiat taas ovat niitä epäkaupallisia ja sinällään kulttuurisesti arvokkaita.  


Itse ajattelen kylläkin mainoksen olevan osa kulttuuria ja etenkin ajankuvaa, mutta juu allekirjoitan että mainoksen ei ole tarkoitus olla sisällä teoksessa, joskaan sitäkään ei voi täysin estää. Tuotteita tarvitaan esim tarpeistossa jne. Tällöin tosin puhutaan ns. product placementista joka on eri asia mutta tietysti myös tärkeä osa esim TV-bisnestä. Kylmä tosiasia on että esimerkiksi sarjoissa näkemäsi muodikkaat vaatteet, autot ja kellot, sun muut esineet on pääosin valmistajilta saatu ilmaiseksi, tai jopa kilpailutuksen jälkeen otettu mukaan maksua vastaan. Voidaan myös toisaalta ajatella, että kaikki teksti sisältää piilomainontaa, jos se sisältää asiaa, ollaanhan aina jossain mielessä kauppaamassa ainakin jotakin käsitystä, suuntausta, tyyliä tai ajattelutapaa. Brandi markkinoinnissahan suuri idea onkin että tuote mielletään liittyväksi johonkin isoon positiiviseen ajattelusuuntaukseen. Näin lopulta mainos leviää ilmaiseksi, kun siitä itsestään tulee esim menestyksen tai edistyksellisyyden merkki.


Takaisin asiaan. Mainoksen pitää siis kuitenkin erottua tekstistä jo lainsäädännönkin mukaan.

Teoksen, jutun tai tarinan on myös samalla tavalla rajattava itsensä irti ympäröivästä todellisuudesta, jotta se voidaan ymmärtää oikein. Ehkä juuri tästä syystä tauluissakin on perinteisesti ollut kehykset.


Entäs kun osa pitää upottaa kokonaisuuteen


On myös tilanteita joissa juttu on nimenomaan suunniteltu tiettyyn kontekstiin, käytettäväksi vain tietyssä tilanteessa ja ympäristössä, jolloin merkittävä osa sen voimaa ja toimivuutta tulee juuri siitä ympäristöstä. Tällöin voidaan ajatella että se tarkoituksellisesti upotetaan osaksi kontekstiaan, mutta tällöin se siis eroaa siitä sisältönsä ansiosta. Voidaan myös ajatella että teos muuttuu ympäristönsä osaksi tai moduuliksi ja menettää näin itsenäisen teoksen aseman. Osa onkin kuten näytös tai kohtaus esityksessä. Uskottava ja saumaton upottaminen onkin silloin yksi kriteeri, jotta teoksen ja/tai sen osan vaikuttavuus ei kärsi.


Huomio herätetään kehystämällä ja kontrastilla


Normaalitilanteessa kuitenkin ensin erottaudutaan ympäristöstä ja saavutetaan yleisön tarkkaavaisuus. Herätetään huomio. Kuinka se tapahtuu, riippuu siis tietysti siitä missä ollaan. 


Jos ympärillä on liikkuvia ja ääntelehtiviä objekteja ja hälinä on melkoinen, voi olla hyvin huomiota herättävää kun ei tehdä mitään. Ehkä on rauhallista kuin luonnossa, tuuli puhaltelee, lehti putoaa, laine liplattaa. 

Rauhallisessa ympäristössä voi taas jonkinlainen äkillinen liike, valonvälähdys, sopiva ääni tms. tulla kysymykseen. Energinen ja nopea rikkoo rauhan ja vie huomion hyvin tehokkaasti.

Kulmikkaassa ympäristössä kaari tai pehmeä linja saattaa erottua hyvin.

Kaarevassa ympäristössä ehkä päinvastoin kulmikas jne.


Etsi siis jonkinlaista vastakohtaa ympäristölle. Mutta ota jotakin myös mukaan, muodoista, väreistä...

Mieli uskoo mielellään, että vaatekomeron takaseinän kautta pääsee Narniaan.

Narnia ilman kulkuaukkoa... ei vain toimi !


Aloitustyyppejä


Ensimmäinen tapahtuma on koukku ja sen ympärillä on ihana lihava mato. 

Anna siis myönteinen ensivaikutelma... 


Ajankohtainen: - Tällaisina aikoina on aina...  Nyt kun... Kuulin juuri, että...

Henkilökohtainen: - Lapsena luulin... olen aina ollut...

Paradoksi: - Tiesitkö: totuutta ei voi todistaa todeksi ilman totuuden määritelmää !

Määritelmä: - Multimediateoksen on oltava vuorovaikutteinen, muuten se olisi vain audiovisuaalinen.

Kaksi mahdollisuutta:  Kumpi olisit? Sherlock vai Watson? 

- Pitäisikö sinun mielestäsi alussa olla jokin retorinen kysymys? 

Jopa vitsi tai kasku, jos se todella liittyy asiaan... no, ok, siis jos on tarkoitus mokata heti kättelyssä...


Aloituksen funktiot


Kerro suoraan, taloudellisesti ja tehokkaasti mistä on kysymys:

Tapahtumapaikka (ja -aika), 

Esittele kaikki henkilöt ja tilanne.

Perustunnelma voi välittyä ihan jo värimaailman kautta ja perus muodoista.


Aloitusta ei siis useinkaan kirjoiteta ihan ensimmäiseksi, 
joten sekin on siis hyvä tietää jo ennenkuin aloittaa kirjoittamisen...


30 maaliskuuta, 2009

OSA 8. Kenttä näkyviin


ActionScript 3 ohjelmointi alkeet
OSA 8. Kenttä näkyviin

Objekteja on ainakin kahdenlaisia sen mukaan mitä ne osaavat tehdä:
1. Näkymättömiä, kuten XMLList, joka vain esim lataa dataa ohjelmaan, sekä 
2. Näkyviä, joilla voi olla jokin visuaalinen ulkoasu. (Näkyvä voi olla piilossa)
Jotta objekti voisi näkyä, sen pitää periytyä näkyvästä objektista, kuten Sprite, Shape tai MovieClip. 
Yksinkertaisesti Sprite luokka siis osaa näkyä ruudulla.
extends avainsana liittää luomamme luokan Sprite -luokan laajennukseksi.


package { // Hello.as <- tallenna tällä nimellä
   import flash.display.Sprite; // <- Tuo Sprite luokka
   import flash.text.TextField;
public class Hello extends Sprite { // <- Laajenna luokkaa
   var viesti:String = "Hello world";
   var tekstikentt:TextField = new TextField();
   public function Hello { tekstikentt.text = viesti; addChild(tekstikentt); // <- Näytä kenttä stagella    }  
    }  
}  

OSA 5. Tekstikenttä


OSA 5. TextField

Lisätään muuttuja tyyppiä TextField, joka on valmis objekti joka osaa näyttää tekstiä stagella. Se tuodaan paketin käyttöön import avainsanalla flashin text -kirjastosta flash.text.

package {
import flash.text.TextField;
public class Hello {
var viesti:String = "Hello world";
var tekstikentt:TextField; // muuttuja tyyppiä TextField
public function Hello {
} //constr
} // class
} // pack


Sanalla new luodaan muuttujaan uusi (tyhjä) tekstikentän ilmentymä:

package {
import flash.text.TextField;
public class Hello {
var viesti:String = "Hello world";
var tekstikentt:TextField = new TextField();
   public function Hello {
   } //constr
} // class
} // pack

TextField -objektilla on ominaisuus .text, joka sisältää ruudulla näytettävän merkkijonon. Siirretään konstruktorissa teksti kentän sisällöksi:

package {
import flash.text.TextField;
public class Hello {
var viesti:String = "Hello world";
var tekstikentt:TextField = new TextField();
public function Hello {
tekstikentt.text = viesti; // <- varsinainen koodi } //constr 
} // class 
} // pack 
Vieläkään teksti ei ole näkyvissä vaikka koodi ajettaisiin. TextField objekti on vielä liitettävä display -listaan. Se on lista joka sisältää kaikki swf -tiedoston ruudulla näkyvät elementit.

OSA 4. Merkkijonon sijoitus muuttujaan


ActionScript 3 ohjelmointi alkeet
OSA 4. Merkkijonon sijoitus muuttujaan

Lisätään muuttuja jonka tyyppi on merkkijono.
var -avainsana kertoo kyseessä olevan muuttujan alustus.
viesti on muuttujan nimi (Ei saa alkaa numerolla, ei välejä)
Kaksoispisteen perässä on tietotyyppi: String 
AS3 on vahvasti tyypitetty, joten tietotyyppi on aina annettava, joissain tapauksissa voi käyttää tyyppiä *, joka vastaa mitä tahansa tietotyyppiä.
Puolipiste on pakollinen rivin loppumerkki.

package {
public class Hello {
// Luokan sisällä yleisesti 
// käytetyt muuttujat tähän
var viesti:String;
public function Hello {
} //constructor
} // class
} // package


Sijoitetaan muuttujaan merkkijono "=" sijoitusoperattorilla;
Merkkijono erotetaan lainausmerkeillä muusta koodista.

package {
public class Hello {
var viesti:String = "Hello world"; // <- sijoitus
public function Hello() {
} //constr 
} // class 
} // pack

OSA 3. Konstruktori


ActionScript 3 ohjelmointi alkeet

OSA 3. Konstruktori

Lisätään luokkaan konstruktori (constructor), joka on metodi ( eli funktio ), joka ajetaan ensimäisenä ja automaattisesti, aina kun luokasta tehdään ilmentymä.
Sillä on aina sama nimi kuin luokalla ja tiedostolla.

package {
public class Hello { 
    public function Hello(){ // <- konstruktori alkaa
// Tähän väliin koodi joka ajetaan 
    } // <- konstruktori loppuu 
} // class 
} // pack

OSA 2. Luokka eli class


ActionScript 3 ohjelmointi alkeet

OSA 2. Luokka eli class

Lisätään pakettiin luokka:

package {
  class Hello { // Luokan nimi on tiedoston nimi (ilman .as)
  } // <- luokka loppuu myös aaltosulkeeseen 
} // <- paketti loppuu 
ActionScript 3 sisältää avainsanoja, joilla säädetään objektien näkyvyyttä suhteessa toisiinsa. 
Sanat protected tai final suojaavat tiedoston muutoksilta, 
private rajaa näkyvyyden luokan sisäiseksi. 
Oletusarvo internal näkyy koko paketin sisällä. 
Sana public avaa objektin suojaukset ja näyttää osan toteutuksesta ulkomaailmalle, objekti ei voi täysin sulkeutua jos sitä halutaan käyttää, joten yleensä ainakin konstruktori ja luokka ovat tyypiltään public. 
Julkaistaan luokka sanalla public: 
package { 
public class Hello { 
} // class 
} // pack

OSA 1. Paketti ja kommentti


ActionScript 3 ohjelmointi alkeet

OSA 1. Paketti ja kommentti

Kaikki alkaa paketista, joka on yksinkertainen tekstitiedosto, joka sisältää ohjelman koodin. Tekstitiedostolle annetaan nimi, yleensä isolla kirjaimella alkava ja tiedostopäätteenä .as 
Kirjaimet tulevat arvatenkin kielen nimestä.

Hello.as -tiedosto, joka sisältää (tyhjän) paketin:
packet {}

Yleensä ennen sanaa packet ei ole yhtään merkkiä, eikä viimeisten aaltosulkeiden jälkeen. Pidän kuitenkin tärkeänä koodin luettavuutta, joten kirjoitan usein kommentin aaltosulkeen perään, erottamaan lohkoja toisistaan.

Voidaan lisätä kommentteja, eli ohjeita jota ei käännetä eikä ajeta:

package {
//Yksirivinen kommentti alkaa kahdella kautta -merkillä

/* Tällainen monirivinen kommentti tarvitsee 
erikseen aloitus ja lopetus merkin
ja paketti on siis aina aaltosulkeiden välissä */
} // <-- paketin loppu (aaltosulkeet kiinni)

ActionScript 3 perusteet

Ensiaskel ohjelmointiin ActionScript 3 kielellä

Ongelmana ohjelmoinnin aloittamisessa voi olla saada toimiva ohjelmointiympäristö pystyyn. Myöskään yksinkertaisia kohta kohdalta ohjeita suomeksi ei tahdo löytyä. Saati sitten kun mennään ohjelmoinnissa pidemmälle.
Jotta voisi kokeilla toimiiko kyseinen ympäristö tarvitaan jokin ohjelma, jolla sen toimivuuden voisi kokeilla. Sitä varten usein tehdään ensin ns. HelloWorld ohjelma, jolla ympäristön toimivuus todetaan.
Siis varmasti toimiva yksinkertainen minimiohjelma, jolla näkee että kyllä se toimii. Tee tekstitiedosto nimeltä Hello.as ja siihen seuraava koodi.
package {
   import flash.display.Sprite;
   import flash.text.TextField;
    public class Hello extends Sprite {
public function Hello() {
  var helloDisplay:TextField = new TextField();
  helloText.text = "Hello World";
 addChild(helloText);
} 
    }
} 


Tämän kääntäminen valitulla ohjelmointiympäristöllä on se varsinainen ongelma, jonka aloittelija kohtaa. En siis syvenny koodiin ja syntaksiin tässä, sen aika on sitten, kun ohjelmointiympäristö pyörii. 
Yksinkertaisia ohjeita pystytykseen on vaikea antaa, koska ympäristöjä on useita erilaisia ja ohjeet hiukan erilaisia kunkin kohdalla. 
Mikäli rahaa on, voi suositella kaupallisia tuotteita, mutta ellei ole, on tyydyttävä seuraavaksi parhaaseen ja myös sen opastuksen tasoon.
Jos käyttää PC -koneita kuten useimmat, FlashDevelop on suositukseni.
Flash
Adoben kaupallinen, mainitsen ensin, koska tästä kaikki on alkanut.
FlashDevelop
Suomalaisten kehittämä ja ilmainen, vain PC -koneisiin. 
Xcode
Applen ohjelmointiympäristö, vaatii viritystä. Itse käytän tätä.
Eclipse
Vaatii viritystä. En tunne kovin hyvin vielä, ilmainen versio on olemassa.
Flex
Adoben kaupallinen versio, toimii lähes paketista.

Kullakin on ohjeita asentamiseen. Palataan niihin myöhemmissä posteissa.
Puran hello -koodin selventävillä kommenteilla myöhemmin.