Arhive autor: Madalin

Elementul <script>

Principala metoda de a adauga JavaScript intr-o pagina web este folosirea elementului <script>.

Elementul <script> suporta 6 parametri:

  • src – optional. Indica fisierul script.
  • async – optional. Indica faptul ca scriptul va fi downloadat imediat, dar orice alta actiune va continue in paralel (incarcarea restului de html, resurse css, imagini etc.). Este valid doar pentru folosirea de fisiere JavaScript prin referirea surse prin parametrul src. Codul va rula in momentul in care e incarcat, astfel daca depinde ca fisierul html sa fi fost incarcat complet, parametrul defer trebuie sa il insoteasca.
  • defer – optional. Indica faptul ca rularea scriptului poate fi amanata in siguranta pana cand continutul documentului a fost incarcat si afisat. La fel, este valid doar pentru fisiere JavaScript referentiate prin parametrul src.
  • type – optional/nerecomandat. Inlocuieste elementul language. Indica tipul de continut (MIME type) al limbajului de script folosit. Prestabilit acesta este „text/javascript”. Alternativ se mai poate folosi „text/ecmascript”, dar amandoua sunt depreciate. Actualul standard este „application/x-javascript”, incompatibila cu browsere vechi. Recomdarea este sa nu fie utilizata pentru a lasa browserele sa foloseasca valoarea lor prestabilita si astfel orice problema va fi ocolita.
  • language – optional/depreciat. Initial indica limbajul de script prin valorile „JavaScript” , „JavaScript1.2” , or „VBScript”. Orice browser din ultimii ani il ignora complet.
  • charset – optional/inutil. Candva indica codul de caractere din fisierul indicat de src, dar aproape nici un browser nu il mai utilizeaza. Codul de caractere este indicat de headerul fisierului JavaScript transmis de serverul web.

Putem folosi cod JavaScript in paginile web prin doua metode. Prima, prin inserarea codului in interiorul elementului <script></script>, sau prin referirea unui fisier JavaScript <script src=”js/script.js”></script>.

Elementul <script> poate fi plasat atat in zona <head> a fisierului html cat si ori unde in zona <body>. Recomandarea este sa fie plasat inainte de inchiderea zonei <body> pentru fisiere JavaScript si in <head> pentru cod in linie.

Pentru a ocoli erori, e necesara intelegerea momentului cand secventele de cod JavaScript vor rula pentru a sti cum declansam atat incarcarea, cat si rularea codului.

Fara parametrii defer si async, codul din fisierul JavaScript incarcat, va fi incarcat si rulat blocand incarcarea altor resurse, in special a fisierului html.

Exista multiple metode pentru a scrie codul JavaScript prin care ceea ce intentionam sa ruleze se va intampla la momenul necesar. Urmareste publicarea unui articol dedicat acestor metode.

Clase abstracte

Articol in lucru…

O clasa abstracta este o clasa schelet care poate fi utilizata doar pentru a scrie noi clase ce o extind si niciodata nu poate fi invocata in initializarea directa unui obiect.

O clasa abstracta poate contine una sau mai multe metode abstracte, ale carui corp nu va fi declarat. Aceasta va obliga clasa care extinde clasa abstracta sa declare toate metodele abstracte definite. Exceptie o fac doar clasele abstracte ce extind clase abstracte, dar o clasa normala va fi obligata sa declare toate metodele abstracte mostenite.

Utilizarea claselor abstracte poate fi necesara in diverse cazuri:

  • obligatia de a construi o clasa ce va implementa obligatoriu metode asteptate
  • obligatia de a porni de la acest schelet ca baza

Reguli ce privesc clasele abstracte:

  • Orice clasa care contine o metoda abstracta, trebuie implicit declarata abstracta
  • Orice metoda declarata abstracta, in implementare trebuie sa contina acelasi nevel de acces sau mai slab; cand metoda abstracta e declarata protejata, ea poate fi implementata ca protejata sau publica, dar nu privata; o metoda abstracta declarata publica, obligatoriu va fi declarata public
  • O clasa abstracta nu poate fi initializata ca obiect
  • Orice metoda abstracta nu poate contine corp de functie
  • Daca declari o clasa extinzand o clasa abstracta, esti obligat sa declari clasa tot abstracta

Exemplu:

Cand nu este ideala utilizarea unei clase abstracte, alternativa ei este Interfata, ce o vom discuta ulterior.

De ce este esențială programarea condusă prin teste (aka Test Driven Development / TDD)

În majoritatea cazurilor, programatorii sunt prea leneși și sar peste teste, confortându-se că sursele lor deja sunt funcționale și nu mai scriu testele unitare de bază.

Scopul testelor este de a împiedica în viitoarele schimbări să intervină probleme critice.

Scrierea testelor după ce codul a fost scris este o altă problemă pentru că testează doar cod și nu funcționalitatea.

Scopul scrierii testului înaintea codului propriu-zis este să știm precis că obținem funcționalitatea dorită și se face constructiv pas cu pas, eliminând astfel posibilitatea unui eșec grav când aplicația este utilizată public.

Majoritatea dau vina că prin această metodă durează mult mai mult să dezvolți o componentă, mai ales o aplicație.

Aceasta este o minciună spusă total cu nerușinare!

Scrierea unei aplicații sau componente folosind metodologia TDD se face mai repede cu garantarea funcționalității.

Un bun programator care a exersat continuu, ajunge în a scrie cod în acest mod la fel de rapid și mult mai cursiv. Această persoană va ști pe termen lung mult mai bine tot ce a așezat în acele surse. În momentele în care se vor adăuga noi componente aplicației, se va ști precis că ceea ce deja există funcționează în continuare fără probleme.

Bol cu cereale

Type hinting și tipul valorii întoarse

Din PHP 7.0.0, limbajul ne lasă să fim mult mai specifici în ce vor accepta și ce vor întoarce funcțiile, respectiv metodele din obiecte.

Poți indica ce tip de argument are nevoie funcția (type hinting – indiciu de tip) și ce tip de rezultat vor întoarce (return type – tipul întoarcerii).

Iată un exemplu:

declare(strict_types=1);

function adaugaNumere (int $a, int $b, boolean $afiseazaSuma): int
{
  $suma = $a + $b;
  if ($afiseazaSuma) {
    echo $suma;
  }
  return $suma;
}

adaugaNumere(1, 2, true); // succes
adaugaNumere(1, "2", true); // eroare, am declarat strict_types activ
adaugaNumere(1, "string", true); // eroare, indiferent de valoarea lui stric_types

Această funcție primește două argumente numere întregi (integer) și o valoare booleană. Va întoarce un număr întreg.

Declarația lui strict_types (tipuri stricte) se face întotdeauna la începutul fișierului pentru a informa compilatorul intenția de a utiliza acest mod.

Uși

Encapsulare și delegare

Encapsularea:

Obiectele își văd de propria lor treabă și de ceea ce au de făcut în spatele ușilor închise. Ele oferă interfața prin care orice cerere (Request) și răspuns (Response) pot fi trecute. Orice date nu trebuie expuse și părțile murdare ale implementării, sunt ascunse în spatele acestor uși.

Un exemplu de delegare aplicat ar fi MVC-ul:

Controllerul, într-un proiect scris folosind OOP și MVC, este surprinzător de simplu și scurt, el invocând în general obiecte din clasele Model și oferind toate datele procesate unui View responsabil de modul expunerii datelor (HTML, Json, XML etc.). Ideal în Controller vom face invocarea Model-elor necesare doar folosind argumentele din Request și rezultatele vor fi oferite View-ului care ideal nu va procesa absolut nimic, ci doar va fi responsabil de afișare, adică un șablon (template) ce aplică valorile primite.

Conceptul este descris doar minimal, dar în realitate, el fiind aplicat extrem de complicat de menținătorii unora din cele mai populare framework-uri, ironie sau genialitate ce o voi lăsa pentru un articol dedicat acestui subiect.

Steering wheel

Paradigma programării orientate pe obiect

Ca multe alte paradigme, programarea orientată pe obiecte, OOP, s-a născut din necesitatea manevrării complexității. Ideea principală este de a împărți întregul sistem în piese cât mai mici, izolate una de cealaltă. Dacă aceste piese mici pot ascunde cât mai multe detalii de implementare, vor deveni ușor de folosit.

O analogie a modului de funcționare al unui automobil poate ajuta înțelegerea principiului mai ușor.

Când conduci o mașină, operezi o intefață: direcția, ambreiajul, accelerația, frâna. Necesarul de cunoștințe de a manevra mașina este limitat de interfață. Această interfață în esență ascunde toate sistemele complexe care fac mașina să funcționeze, cum ar fi motorul acesteia, sistemul electronic, și multe altele. Ca șofer, nu trebuie să te îngrijorezi de acele sisteme complexe.

O idee similară este împărtășită și de OOP. Obiectul ascunde complexitatea funcționalității lui și expune o interfață limitată, ușor de utilizat. Adițional, un obiect poate ascunde anumite parți și preveni modificarea lor directă, un aspect important al OOP.

În aplicații mari și complexe, unde dezastre se pot întâmpla când accesarea directă a proprietăților este posibilă, OOP operează pe ideea că acele proprietăți vor fi ascunse și inaccesibile altor factori în afara obiectului și vor fi accesibile doar prin operații oferite de interfața publică.

Salmon Glacier

Salutare lume!

Bine ai venit pe acest blog.

Sunt un programator, ce a părăsit România în 2014, la vârsta de 31 de ani.

Din simplul motiv că suntem apreciați ca programatori în întreaga lume, mai ales în țările dezvoltate, am ales să ne petrecem viața ca familie acolo unde sistemul funcționează mai bine și perspectivele de educație pentru copii noștri sunt mai bune decât în România. Secundar, să fie o locație de care să ne și bucurăm mai mult — cândva cineva îmi spunea că a ales să trăiască acolo unde se simte într-o vacanță permanentă și astfel serviciul nu a mai fost un stres de atunci.

Partea de renumerație nu a fost importantă în decizie, datorită posibilităților de lucru la distanță, trend care devine tot mai la modă și adoptat de tot mai multe companii și vechi și noi. În prezent, companii din diverse colțuri ale lumii, plătesc oameni la distanță similar cu cei ce preferă încă lucrul în birou, ceea ce duce la o uniformizare a venitului mediu ca programator pe plan global, oferind șansa chiar și în România pentru cei ce nu doresc să o părăsească, să lucreze pe un venit mai adecvat comparativ cu salariile mizere încă oferite de exploatatorii locali — personal, orice e sub 1.200 € după impozite îl consider un salar de sclav în domeniul IT.

Posibilitatea de a lucra de oriunde, e ceea ce mă ține încă a sta zi de zi în fața calculatorului și a-mi cultiva continuu cunoștințele de programare pentru a fi în ritmul cerințelor actuale.