Repetitivitatea în PYTHON


Orice designer de limbaj care se respectă caută să facă ceva special pentru a defini spectaculos instrucţiuni care să implementeze structurile repetitive:
while ...do
do ...until
for
perform
repeat.
Unii reuşesc, alţii nu reuşesc. Important este să se vadă ceea ce este comun la cât mai multe programe şi să se găsească soluţii ca să nu mai scrie programatorul în disperare instrucţiuni, care nu aduc nimic nou de la bloc repetitiv, la bloc repetitiv. Mi-a plăcut că în PYTHON la instrucţiunea for nu mai trebuie să scriu eu acel stupid i++ şi nici i < n, căci range() a preluat totul. Nici traversarea de structuri omogene nu mai se face în acel mod barbar, ci mult mai elegant, căci secvenţa:
B = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
S = 0
for i in B:
S+= i
este cu mult mai drăgălaşă decât ceea ce scriam în C++:
s=0;
for (i=0; i < n; i++)
    s+= B[i];
Dacă ţinem morţiş să repetă ceea ce ştiam de demult, vom scrie:
n = len(B)
for i in range(n):
    s+=B[i]
economia este vizibilă, căci au fost încorporate şi incremetarea variabilei de control şi testul de apartenenţă la inteval în construcţia compactă for i in range(n): şi nu vom mai fi tracasaţi cu testarea variabilei de control şi nici cu incremetarea. Mai mult, funcţia range() are 3 parametri. dacă primul lipseşte valoarea sa implicită este ZERO şi la al treilea parametru care defineşte raţia, dacă lipseşte, valoarea sa implicită este UNU. De aceea, range(5,17,4) într-o intrucţiune for, va genera termenii 5, 9, 13, căci termenul generat 17 nu este strict mai mic decât limita superioară a intervalului dat, 17.
Dacă vrem să fim barbari şi primitivi, vom folosi construcţia while... care arată cam aşa:
s=0
i=0
while i < n:
     s+=B[i]
    i+= 1
....
Acum, face fiecare cum doreşte, dar cine citeşte un program, ori va cădea în admiraţie, ori va râde cu gura până la urechi. Fiecare dintre noi alege să fie văzut ori aşa, ori aşa. Forma do ... nu există aici.

revenire