La început, la nașterea computerului, nu existau limbaje de programare. Programele arătau cam așa:
00110001 00000000 00000000
00110001 00000001 00000001
00110011 00000001 00000010
01010001 00001011 00000010
00100010 00000010 00001000
01000011 00000001 00000000
01000001 00000001 00000001
00010000 00000010 00000000
01100010 00000000 00000000
Acesta este un program pentru a adăuga numerele de la 1 la 10 împreună și a tipări rezultatul: 1 + 2 + … + 10 = 55. Ar putea rula pe o mașină simplă, ipotetică. Pentru a programa calculatoarele timpurii, era necesar să setați matrice mari de comutatoare în poziția corectă sau să faceți găuri în benzi de carton și să alimentați cu ele computerul. Vă puteți imagina probabil cât de plictisitoare și predispusă la erori a fost această procedură. Chiar și scrierea de programe simple necesita multă inteligență și disciplină. Cele complexe erau aproape de neconceput.
Desigur, introducerea manuală a acestor modele misterioase de biți (formate din unu și zero) dădea programatorului un sentiment profund de vrăjitor puternic. Și asta trebuie să valoreze ceva în ceea ce privește satisfacția în muncă.
Fiecare linie a programului anterior conține o singură instrucțiune. Ar putea fi scris în clar astfel:
- Stocați numărul 0 în locația de memorie 0.
- Stocați numărul 1 în locația de memorie 1.
- Stocați valoarea locației de memorie 1 în locația de memorie 2.
- Scădeți numărul 11 din valoarea din locația de memorie 2.
- Dacă valoarea din locația de memorie 2 este numărul 0, continuați cu instrucțiunea 9.
- Adăugați valoarea locației de memorie 1 la locația de memorie 0.
- Adăugați numărul 1 la valoarea locației de memorie 1.
- Continuați cu instrucțiunea 3.
- Afișați valoarea locației de memorie 0.
Deși este deja mai ușor de citit decât supa de biți de mai sus, este încă destul de obscur. Folosirea numelor în loc de numere pentru instrucțiuni și locații de memorie este de ajutor.
Set “total” to 0.
Set “count” to 1.
[loop]
Set “compare” to “count”.
Subtract 11 from “compare”.
If “compare” is zero, continue at [end].
Add “count” to “total”.
Add 1 to “count”.
Continue at [loop].
[end]
Output “total”.
Puteți vedea cum funcționează programul în acest moment? Primele două linii oferă două locații de memorie valorilor lor de pornire: total va fi folosit pentru a construi rezultatul calculului, iar count va ține evidența numărului la care ne uităm în prezent. Rândurile care folosesc compare sunt probabil cele mai ciudate. Programul vrea să vadă dacă numărul este egal cu 11 pentru a decide dacă se poate opri din rulare. Deoarece mașina noastră ipotetică este destul de primitivă, poate testa doar dacă un număr este zero și poate lua o decizie pe baza acestuia. Deci, folosește locația de memorie etichetată compare pentru a calcula valoarea numărului – 11 și ia o decizie pe baza acelei valori. Următoarele două linii adaugă valoarea lui count la rezultat și incrementează numărul cu 1 de fiecare dată când programul a decis că count nu este încă 11.
Iată același program în JavaScript:
let total = 0, count = 1;
while (count <= 10) {
total += count;
count += 1;
}
console.log(total);
// → 55
Această versiune ne oferă câteva îmbunătățiri suplimentare. Cel mai important, nu mai este nevoie să specificăm modul în care dorim ca programul să sară înainte și înapoi. Construcția while are grijă de asta. Continuă să execute blocul (înfășurat în acolade) sub el atâta timp cât condiția care i-a fost dată este valabilă. Această condiție este count <= 10, ceea ce înseamnă „numărul este mai mic sau egal cu 10”. Nu mai trebuie să creăm o valoare temporară și să o comparăm cu zero, care a fost doar un detaliu neinteresant. O parte din puterea limbajelor de programare este că ele se pot ocupa de detalii neinteresante pentru noi.
La sfârșitul programului, după ce construcția while s-a terminat, operația console.log este folosită pentru a scrie rezultatul.
În cele din urmă, iată cum ar putea arăta programul dacă s-ar întâmpla să avem disponibile operațiile convenabile range și sum, care, respectiv, creează o colecție de numere într-un interval și calculează suma unei colecții de numere:
console.log(sum(range(1, 10)));
// → 55
Morala acestei povești este că același program poate fi exprimat atât în moduri lungi, cât și scurte, de necitit și citibil. Prima versiune a programului a fost extrem de obscură, în timp ce ultima este aproape clară: înregistrați suma intervalului de numere de la 1 la 10. (Vom vedea în capitolele ulterioare cum să definiți operații precum sum și range).
Un limbaj de programare bun ajută programatorul, permițându-i să vorbească despre acțiunile pe care computerul trebuie să le realizeze la un nivel superior. Ajută la omiterea detaliilor, oferă blocuri de construcție convenabile (cum ar fi while și console.log), vă permite să vă definiți propriile blocuri de construcție (cum ar fi sum și range) și face ca acele blocuri să fie ușor de compus.
Sursa: Marijn Haverbek, Eloquent JavaScript, licența CC BY-NC 3.0. Traducere și adaptare: Nicolae Sfetcu
Lasă un răspuns