Edukira joan

JavaScript

Wikipedia, Entziklopedia askea
Anazj (eztabaida | ekarpenak)(r)en berrikusketa, ordua: 15:19, 27 abendua 2019
 JavaScript
Jatorria
Sorrera-urtea1996
Argitaratze-data1995
Azken bertsioaECMAScript 2024
Honen izena daramaJava
Aurkezpen data1995eko abenduaren 4a
Ezaugarriak
Programazio paradigmaProgramazio funtzional, generic programming (en) Itzuli, aspect-oriented programming (en) Itzuli, gertaeretara zuzendutako programazioa, prototype-based programming (en) Itzuli eta Programazio inperatibo
Media motatext/javascript, application/x-ecmascript, application/x-javascript, text/javascript1.0, text/javascript1.1, text/javascript1.2, text/javascript1.4, text/javascript1.3, text/javascript1.5, text/livescript, text/x-ecmascript eta text/x-javascript
Deskribapena
OinarrituaECMAScript
Honen eragina jaso duScheme, Self (en) Itzuli, Java, C, LiveScript (en) Itzuli, Lua, Perl, AWK (en) Itzuli, HyperTalk eta Python
Kokapena
JabeaSun Microsystems eta Oracle Corporation
Ekoizpena
DiseinatzaileaBrendan Eich
ecma-international.org…

JavaScript (edo JS) goi-mailako programazio-lengoaia bat da, ECMAScript espezifikazio estandarrarekin bat datorrena. Paradigma anitzeko lengoaia bat da, objektuetara zuzenduriko programazioa, programazio inperatiboa eta programazio funtzionala jasaten dituena.

Script-lengoaia bat da, atazen exekuzioa ingurune berezietan automatizatzeko diseinatua. Web-orri elkarreragileak sortzeko aproposa da eta funtsezkoa web aplikazioetan. Webgune gehienek erabiltzen dute eta web-nabigatzaile hedatuenek dute hura exekutatzeko motorra. HTML eta CSSrekin batera Webaren oinarrizko hiru teknologietako bat da[1].

Sintaxi aldetik C eta Java programazio-lengoaien antza du eta izenez Java eta JavaScript oso antzekoak izan arren, ez dira nahastu behar; semantika aldetik lengoaia desberdinak dira eta helburu desberdinarekin diseinatuak izan ziren.

Historia

1995. urtean Netscape Communications enpresak Brendan Eich kontratatu zuen, Scheme programazio-lengoaia bere Netscape nabigatzailean txertatzeko. Aurretik, Netscape Communications enpresako kideak Sun Microsystems enpresakoekin elkarlanean aritu ziren haren Java programazio-lengoaia Netscape nabigatzailean gehitzeko eta Microsoft enpresarekin lehiatzeko web-teknologien eta plataformen hedapenean. Azkenean, Netscape Communications enpresako arduradunek Perl, Python, TcL edo Scheme lengoaiak baztertu eta script programazio-lengoaia berri bat sortzea erabaki zuten, Java osatu eta haren antzeko sintaxia izango zituena. Antzeko proposamenak sortuko ziren beldurrez, lehia-giro horretan haien ideia babesteko modu onena prototipo bat azkar sortzea zela pentsatuta, Eich-ek JavaScript-en lehen prototipoa 10 egunean garatu zuen, 1995eko maiatzean[2][3].

Lengoaia berriak hasierako garapenean Mocha izena hartu bazuen ere, 1995eko irailean Netscape Navigator 2.0 nabigatzailearen beta bertsioetan erabilia izan zenean, LiveScript izendatu zuten ofizialki. Gerora, 1995eko abenduan, Netscape Navigator 2.0 beta 3 bertsioan banatua izan zenean, JavaScript izenez berrizendatua izan zen[4].

Microsoft enpresarek 1996an argitaratu zituen bere script-teknologiak, VBScript eta JScript, bere Internet Explorer nabigatzailean erabiltzeko. CSSrako eta HTMKrako euskarrien garapenean ere ari zen Microsoft, baina Netscape Navigator nabigatzailean erabiltzen zirenekin alderatuta, oso desberdinak ziren. Gara hartako diseinatzaileentzat eta programatzaileentzat oso zaila gertatzen zen bi nabigatzaileetan ondo ikusteko moduko webguneak sortzea. Bi enpresen eta haien nabigatzaileen arteko lehia izugarria zen[5].

Bateragarritasun arazo horiek ikusita, Netscape Communications enpresak estandarretaz arduratzen den Ecma International erakundearekin harremanetan jartzea erabaki zuen 1996ko azaroan. JavaScript bidali zion, hark espezifikazio estandar bat lantzeko. Netscape-k egindako lanean oinarrituz estandar bat sortzea zen asmoa, beste nabigatzaileen saltzaileek haien inplementazioak estandarrari jarraituz egin eta webguneen bateragarritasuna lortzeko. Horrela, 1997an sortu zen ECMAScript espezifikazio estandarraren lehen bertsioa, ECMA-262, JavaScript-en oinarritutakoa[6]. ActionScript eta JScript programazio-lengoaiak ere ECMAScript espezifikazio estandarraren inplementatuak izan ziren. ISO estandarra ere badu ISO/IEC 16262[7].

Hori guztia gertatzen ari zen bitartean, JavaScript lengoaiak ematen zituen aukerak aztertzen zebilen garatzaileen komunitatea. 2005ean Jesse James Garrett-ek "Ajax: A New Approach to Web Applications" artikuluan erabili zuen lehen aldiz Ajax terminoa, web-teknologia multzo bati buruz hitz egiteko. Teknologia horien muina JavaScript lengoaia da eta haiei esker Web-erako aplikazio dinamikoak sortzea posiblea gertatu zen, web-orrietan datuak kargatzeko aukera eman zutenak, web-orriak behin eta berriz kargatzen ibiltzen ibili gabe.

Ajax teknologiek eragindako iraultzak bultzada handia eman zion JavaScript programazio-lengoaiari, Internet-eko programazio-lengoaia ezagunetako bat bihurtzerainokoa.

Erabilera webguneetan

Javascripten elabilera zabalena, kapsulatutako funtzioak HTML orrietan idaztea da. Hauek, orriaren Document Object Model-arekin elkar-eragiten dute. Hona hemen adibide batzuk:

  • Eduki berria kargatzea orriarentzat edo zerbitzariari datuak bidaltzea AJAX bitartez, orria berriz kargatru behar izangabe.
  • Orrian dauden elementuen animazioa, desagertaraztea, beraien tamaina aldatzea, mugitzea...
  • Elkar-eragiten duen edukia, jokoak edo audio edo bideoen erreprodukzioa adibidez
  • Web inprimaki baten sarrerako balioak balioztatzea zerbitzarira bidali aurretik onargarriak direla ziurtatzeko.
  • Erabiltzaileek irakurtzeko ohiturei eta arakatze-jarduerei buruzko informazioa hainbat webguneetara igortzea.

JavaScript kodea erabiltzailearen arakatzailean lokalki exekutatu daitekeenez (urruneko zerbitzarian beharrean), arakatzaileak erabiltzailearen ekintzetara azkar erantzun dezake, aplikazio sentikorragoa bihurtuz. Bestalde, JavaScript kodeak HTML-ak ezin dituen erabiltzaileen ekintzak hauteman ditzake, hala nola, teklak. Gmail bezalako aplikazioek ondo aprobetxatzen dute: erabiltzaile interfazearen logika gehienak JavaScript-en idatzita daude, eskaerak zerbitzarira bidaliz (adibidez, mezu elektroniko baten edukia). Ajax programazioa gero eta gehiago erabiltzeko joerak teknika hori modu berean ustiatzen du.

JavaScript motorra (JavaScript interprete edo JavaScript inplementazioa bezala ere ezaguna) JavaScript iturburu kodea interpretatzen du eta gidoia horren arabera exekutatzen du. Lehen JavaScript motorra Brendan Eich-ek sortu zuen Netscape Communications Corporation-en, Netscape Navigator web arakatzailearentzat. SpiderMonkey izeneko motorra C-n dago martxan. Ordutik, eguneratu egin da (JavaScript 1.5) ECMA-262 3. edizioa betetzeko. Rhino motorra, batez ere Norris Boyd-ek sortua (Netscape aurretik, orain Google-n) Javascript-en inplementazioa da Java-n. Rhino, SpiderMonkey bezala, ECMA-262 3. edizioarekin bateragarria da.


Web arakatzailea Javascript-eko ostalari ohikoena da. Web arakatzaileek maiz jaiotzen ez diren objektuak sortzen dituzte, denborarik ez duen ingurunearen mende, Document Object Model (DOM) JavaScript-en irudikatzeko. Web zerbitzaria beste zerbitzu ingurune arrunt bat da. Javascript web zerbitzariak normalean objektu propioak azaltzen ditu HTTP eskaera eta erantzun objektuak irudikatzeko; horrela, JavaScript programa batek galdetu eta manipulatu lezake web orriak dinamikoki sortzeko.

Javascript arakatzaile ezagunen laguntza partekatzen duten hizkuntza bakarra denez, beste hizkuntza batzuetako marko askok biltzen duten hizkuntza bihurtu da, nahiz eta JavaScript ez izan helburu horietarako diseinatuta. Hala ere, bere izaera dinamikoari dagozkion errendimendu-mugen artean, JavaScript motorren abiadura handitzeak konpilazio-ingurune harrigarria bihurtu du.

JavaScript eta Java

JavaScript eta Java programazio-lengoaiek hain antzeko izenak eta sintaxiak izateagatik, antzeko lengoaiak direla pentsatzera eraman dezake. Bi lengoaiak sortu ziren 1995. urtean, Sun Microsystems enpresako James Gosling-ek sortu zuen Java eta Netscape Communications enpresako Brendan Eich-ek JavaScript. Javaren hitz erreserbatuak mantendu ziren JavaScript diseinatu zenean eta Java-ren liburutegi estandarrak kontuan hartuz diseinatu ziren JavaScript-enak.

Baina antzekotasun horiek eta beste zenbait aparte utzita, haien artean dituzten diferentziek oso lengoaia desberdinak egiten dituzte. Batzuk aipatzearren, hona hemen nagusienak:

  • Java-k datu-moten kontrol estatikoa (static typing) egiten du. Iturburu-kodea aztertzen du, eta kontrola gaindituz gero, datu-motekin erlazionatutako ezaugarri batzuk beteko direla bermatzen du. JavaScript-ek datu-moten kontrol dinamikoa (dynamic typing) egiten du; exekuzio garaian egiten du datu-moten kontrola.
  • Java programak bytecode edo kode eramangarri moduan kargatzen dira. JavaScript programak, aldiz, erabiltzaileak idatzitako iturburu-kode formatuan.
  • Java-ko objektuak klaseetan oinarritzen dira, JavaScript-enak aldiz prototipoetan.
  • Java-k ez zuen jasaten programazio funtzionala, Java 8 sortu zen arte. JavaScript-ek aldiz hasieratik jasaten du, Scheme programazio-lengoaiaren eraginagatik.

Ezaugarriak

Datu Motak

Aldagaiei hasierako balio bat esleitzen zaie, hori eginez, aldagai horri balioaren mota ezartzen zaio.

JavaScript-en horrela adierazten dira esleipenak:

var zenb = 0;

Esleitu eta gero, horrela aldatzen dira aldagaiak:

zenb = 2;

Datu mota bakunak

JavaScript-ek ondorengo oinarrizko datu motak ezagutzen ditu:

  • Boolearrak:

Bi balio bakarrik onartzen ditu: false (faltsua) eta true (egiazkoa).

var egiazkoa = true;

var faltsua = false;
  • Zenbakiak:

Adibidez: 10, 0.8, -4.2...

var zenbakia = 5;

var zenbakianeg = -5;
  • Karaktere kateak edo string-ak:

Adibidez: 'Kaixo mundua!', 'Egunon'...

var nireIzena = "Izen bat";

var karakterea= "F";

Datu mota egituratuak

Hauek dira JavaScript-en datu mota egituratuak:

  • Bektoreak

Objetuak dira, metodo eta propietateak dituzte, non programatzaileak edozein unetan erabil ditzake. Adibidez: (0, 2, 4).

var nireArray = new Array(1, 3, 5);

var besteArray = new Array();

var nireArray = new Array[1, 3, 5];

var besteArray = [];
  • Objetuak
var nireObjetua = new Object();

var nireObjetua = {};

Agindu motak

JavaScript-en oinarrizko aginduak  bi dira, balioen esleipena (var a = 2) eta datu-idazketak (print).

Datuen irakurketa aldiz, input funtzioa erabiltzen da.

Kontrol Egiturak

Baldintzapeneko egiturak:

Batzuetan, kode bloke batean, exekuzio fluxua kontrolatzea interesatzen zaigu alternatibak ezarriz, hau da, zenbait adierazpen baldintza baten arabera exekutatzen direla. Hori ahalbidetzeko baldintza egitura ezberdinak ezberditzen ditugu.

If..Else

Baldintza bat betetzen den egiaztatzeko IF egiturak erabiliko ditugu. Kontrol egitura mota hau programazio lenguia guztietan aurkitzen da.

if (kondizioa) {
    kodea_A;
} else {
    kodea_B;
}

Azter dezagun beraz adibide hau. IF baldintza esprisio boolear baten bidez adierazten da, hau da, lehenengo baldintza betetzen bada jarraian duen kode zatia exekutatuko du (giltzen artean aurkitzen den kodea). Baldintza hau ez bada betetzen eta else adarra baldin badago, adar honetan dagoen kodea exekutatuko da. Else adarrik ez badago ordea, egitura hau bukatutzat ematen da eta ez da ezer gehiago egingo. Else adarra hautazko adarra da. Esaterako jarraian ikus daitekeen adibide kodean ez da else adarrik erabiltzen, if egitura sinplea da:

if (n < 0) {
    n = -n;  // balio absolutua
}

Beste zati honetan berriz egitura osoa ikus dezakegu:

// zenbaki handiena kalkulatzeko
var a = prompt("sakatu bi zenbakietako bat: ");
var b = prompt("sakatu bestea: ");
var hand;

if (a > b) {
    hand = a;
} else {
    hand = b;
    console.log("Handiena", hand);
}

Ondoko nabardura hauek hartu azpimarratu behar dira: Elif adarra else adarraren oso antzekoa da. Adar honek, hasierako baldintza betetzen ez bada, beste baldintza bat betetzen den egiaztatuko du. Bigarren baldintza hau betetzen bada dagokion kodea exkutatuko da. Erabiltzaileak nahi adina elif adar erabil ditzake.

if (ordua < 12) {
    console.log("Egun on");
} else if (ordua < 20) {
    console.log("Arratsaldeon");
} else {
    console.log("Gabon");
}
Switch

Ikusi dugun bezala if-elif-else ri esker une bakoitzean baldintza batzuen arabera nola jokatu aukera dezakegu. Batzuetan ordea balio batzuen artean bakarrik aukeratu nahi dugu, eta dagokion kodea exekatu aldagai batzuen balioa eta funtzio batek itzultzen duen balioaren arabera. Kodea garbi eta irakurgarri mantentzeko, ainbat if kasu erabili ordez switch-case erabil dezakegu:

switch (variable) {
   case balioa1:
      // 1 balioarentzako kodea
      break;
   case balioa2:
      // 2 balioarentzako kodea
      break;
   case balioa3:
   case balioa4:
   case balioa5:
      // 3, 4 eta 5 baioentzako kodea
      break;
   default:
      // aurreko balioetako bat ez bada exekutatu kode hau
}

Adibide honetan, aldagaiaren zenbait balio egiaztatzen ditugu, eta, horrela, bakoitzak egoera desberdinen arabera kode desberdin bat exekutatzeko aukera ematen du. Orain, value3, value4 eta value5 aztertzen baditugu, value5 azpian agertzen den kodea soilik exekutatuko dela ondoriozta dezakegu, gainontzeko balioak hutsik daudelako, baina baita hausteko klausula (break) ez dutelako. Erreserbatutako hitz honek Javascript kodea exekutatzen duen puntuan mozten du, kodean dagoen blokea utziz. Horrek ere lagunduko digu, adibidez, begizten kasuetan.

Honekin, switch kodea baldintzez baliatuz exekutatu dezakegu, baina if batekin egin behar ditugun eragiketa konplexurik gabe. Hala ere, switch ezin da inoiz ordezkatu if bategatik, alderantziz gerta daitekeen bezala.

Operadore logikoak eta erlazionalak

Baldintzak sortzeko, bi elementu berri erabili behar ditugu: eragile logikoak eta eragile erlazionalak. Eragile logikoak 3 dira.

Eragile Logikoak
Operadorea Esanahia
&& Eta
|| Edo
! Ez

6 eragile erlazional ezberdintzen dira.

Eragile Erlazionalak
Operadorea Esanahia
== Berdin
< Txikiago
> Handiago
<= Txikiago edo berdin
>= Handiago edo berdin
!= Ezberdin

Eragile erlazionalak erabiliz baldintza errazak sor ditzakegu, gero baldintza konplexuagoak ere eratu ditzakegu operadore logikoak erabiliz. Adibidez:

if (adina > 6 && adina < 12) {
    alert("Umea zara");
} else if (adina >= 12 && adina < 18) {
    alert("Eres un adolescente");
} else if (adina >= 18 && adina < 31) {
    alert("Nerabe bat zara");
} else if (adina >= 31 && adina < 60) {
    alert("Heldu bat zara");
} else if (adina >= 60) {
    alert("Heldu zaharragoa zara");
} else {
    alert("6 urte baino zaharragoa ez den haurra izan behar duzu");
}

Iterazio - egiturak

Programazioan, begizta baten instrukzio blokea exekutatzen denean, iterazioa gertatu dela esaten da. Iterazio hauei esker instrukzio blokea behin eta berriz errepika dezakegu, agindu guzti hauek berriz idatzi gabe. Javascriptek bi iterazio mota bereizten ditu, while iterazioa eta for iterazioa.

while kontrol-egitura

Egitura errepikakor (loop) orokorrena while da. Adibide honetan erabilera sinplea azaltzen da:

while (iterazioa_jarraitzeko_baldintza) {
    // aginduak
}

Baldintza honek, emandako baldintza exekutatuko du emandako espresioa egia den bitartean.

Kontrol iterazio honek break eta continue espresioak aitortzen ditu.

do...while kontrol egitura

do...while aginduak emandako adierazpena exekutatuko du emandako baldintza bete izanez gero.

Hala ere, while instrukzioa ez bezala, kontrol egitura honek beti exekutatuko du emandako adierazpena, gutxienez behin.

do {
    c += 1;
} while (c < 10);
for kontrol-egitura

Agindu honek iterazioaren baldintzari buruz kontrol gehio baimentzen du. Hasierako espresioa behin exekutatzen da, eta baldintza beti aztertzen da iterazioaren hasieran

Biraren bukaeran, egindako aldaketak exekutatzen dira beti baldintza aztertu baino lehen. Horrela adierazten da for agindua:

for ("Hasierako espresioa"; "Baldintza"; "Amaierako espresioa") {
    // exekatu beharreko kodea
}

Adibidez:

var c;

for (c = 0; c < 10; c += 1) {
    //aginduak
}
break eta continue aginduak

Baldintzazko egituren antzera iterazioetan ere break eta continue aginduak erabiltzeko aukera dugu. break aginduak begiztaren exekuzioan bat-bateko amaiera eragiten du, continue aginduak berriz, baldintza egiaztatzen du begizta berrabiarazi baino lehen.

Funtzioak

Funtzioa, helburu edo zeregin espezifiko bat betetzeko egin beharreko agindu multzoa da. Helburu konplexuak zeregin sinpleagoetan zatitzea ahalbidetzen du, scriptak kudeatzea eta mantentzea errazten dutenak. Parametro edo argumentu bat funtzio batera igortzen diren datuak dira, egin beharreko ekintza burutzeko. Funtzioak zero argudio edo gehiago pasa daitezke. Funtzioa bat, funtzio horri scriptaren, orrialde beraren edo kanpoko orrialdeko edozein lekutatiik deitzen zaionean exekutatzen da. Funtzioak beti ziurtatuta daude exekutatutakoan balioren bat itzultzeko. Egikaritutakoan funtzio batera igorritako datuak funtzioaren sarrera gisa ezagutzen dira eta funtzio exekutatu batetik itzultzen den balioa funtzioaren irteera bezala ezagutzen da.

JavaScript-en berezitasunetako bat, zera da, azpiprogramak ez dituela.

Hona hemen adibide batzuk:

function hello() {
  alert("Hello, World!");
}
function stepToFive(number) {
  if (number > 5) {
    number -= 1;
  }
  if (number < 5) {
    number += 1;
  }
  return number;
}


Sintaxia eta semantika

Hizkuntzaren azkeneko bertsioa ECMASCript 2016 da, 2016ko uztailaren 17an publikatua.

JavaScript-en, aldagaiak var hitza erabiltzen definitzen dira:

Aldagaiak

var x; // x aldagaia definitzen du, nahiz eta baliorik ez eman

var y = 2; // y aldagaia definitzen du, eta 2 balioa ematen dio

Xehetasunak adierazteko,bi barra diagonal erabiltze dira, gorako adibidean bezala.

Ez dira existitzen Input/output funtzionalitateak lengoaia honetan, exekuzioak ematen digulako aukera hori. Hala eta guztiz ere, exekuzio ingurune gehienek, 'console' izeneko objektu bat dauka, ausazko fluxu irteeran inprimatuko duena.

console.log("Hello world!");

Funtzio errekurtsiboa:

function factorial(n) {
    if (n === 0) {
        return 1;
   } 
   return n * factorial(n - 1);
}

Lambda funtzioko adibideak (edo funtzio anonimoak)

var displayClosure = function() {
    var count = 0;
    return function () {
        return ++count;
    };
}
var inc = displayClosure();
inc(); // Itzultzen du 1
inc(); // Itzultzen du 2
inc(); // itzultzen du 3

Dei automatikoko espresioak:

Funtzioei aldagaiak parametro bezala ematea eskeintzen du

var v;
v = 1;
var getValue = (function(v) {
  return function() {return v;};
}(v));
v = 2;

getValue(); // 1


Erreferentziak

  1. (Ingelesez) «JavaScript» MDN Web Docs (kontsulta data: 2019-12-27).
  2. Severance, Charles. (2012-02). «JavaScript: Designing a Language in 10 Days» Computer 45 (2): 7–8.  doi:10.1109/MC.2012.57. ISSN 0018-9162. (kontsulta data: 2019-12-27).
  3. (ingelesez) YouTube, Brendan Eich - CEO of Brave. (kontsulta data: 2019-12-27).
  4. Netscape and Sun announce JavaScript, the Open, Cross-Platform Object Scripting Language for Enterprise Networks and the Internet, «Press Release» web.archive.org 2007-09-16 (kontsulta data: 2019-12-27).
  5. «JavaScript: How Did We Get Here? - O'Reilly Media» web.archive.org 2016-07-19 (kontsulta data: 2019-12-27).
  6. ECMAScript Programming Language Specification Standard «Standard ECMA-262» www.ecma-international.org (kontsulta data: 2019-12-27).
  7. ECMAScript language specification (Ingelesez) 14:00-17:00. «ISO/IEC 16262:2011» ISO (kontsulta data: 2019-12-27).

Kanpo loturak