casta invalidă 2

Avertisment: acest post nu poate fi tradus ușor în “limba română” – îmi cer scuze necalculatoriștilor.

Atenție mărită: ar fi bine ca înainte de a citi soluția să ciți postarea cu problema.

Și acum concluzia: soluția problemei cu numere, transformări și caste invalide din postul anterior cu subtitlul “așa poate arăta o dimineață din viața unui programator care se minte că nu lucrează în PHP”.

Varianta greșită:

Err2

Varianta corectă:

corect

Dincolo de culori, ceva e diferit: o paranteză nu e închisă la timp (după primul Str$) ceea ce ducea la interpretarea a tot ce urmează după, pînă la finalul liniei, ca argument al funcției Str. Str așteaptă un numeric dar primește un ditamai string conținînd diverse aiureli, inclusiv virgule – nu că ele ar fi deranjat cel mai tare.

Odată închisă paranteza la timp (adică a treia paranteză închisă în linia cu primul Str), totul revine la normal, Str primește în fine ce își dorește – în cazul ăsta un întreg – și putem merge la masă liniștiți.

Unde e problema adevărată? Oricît te chinui să îți dorești compilator riguros și verificare strictă de tipuri, unele conversii se fac implicit (din nefericire) pentru că Microsoft alege să stimuleze lenea și ambiguitatea. Dacă vroiam conversii așa de implicite, dacă nu înțelegeam amănunte precum diferențele dintre întregi, booleeni, threaduri sau fructe/legume/animale, mă duceam în javascript sau PHP. Dacă mă aflam unde speram, adică nu la voia sorții în ce privește conversiile și tipurile de date ci într-un limbaj sau mediu serios, compilatorul ar fi semnalizat ca eroare faptul că am încercat – prin lipsa parantezei – să concatenez un întreg cu un string cu atît mai mult cu cît l-am implorat să fie strict. Degeaba eforturile de a începe fiecare modul sau clasă cu poezia cu formă fixă:

Option Strict On
Option Explicit On
Option Infer Off

Există vreun OPTION care mi-a scăpat și care să-l pună pe compilator chiar să-și facă treaba, fără să încerce să fie inteligent, fără să-mi ghicească intențiile și fără să-mi “ușureze” existența?

Întregii se pot concatena cu stringurile uite așa, pentru că lenea și prostia sînt totuși valori universale deci trebuie recunoscute și transmise, ca să nu se piardă în timp ca aptitudini esențiale. Dacă nu se trudeau să convertească implicit întregul în string și să-l concateneze, dacă îmi spuneau să mi-o fac cu mîna mea, nu aveam nicio șansă să mă uit 5 minute la ecran numărînd parantezele. Măcar o atenționare să-mi fi dat.

Chiar așa, de ce nu ne ducem cu toții în PHP ca să fie clar măcar că nu avem compilator deci nici speranțe înșelate? Microsoafte, mai ai vreun motiv pentru noi să ne păstrezi de clienți? Poate ne ajuți cu un PHP#?

Notă: titlul “castă invalidă” e la mișto.

2 thoughts on “casta invalidă 2”

  1. Nu ca voi ca sa ma laud (nici nu voi sa te inspaimant), dar eu am observat imediat asimetria parantezelor din postul anterior. In rest – un comentariu: cand ma izbesc de astfel de situatii, imi spun ca se poate si mult, mult mai rau. Nu trebuie decat sa arunc cu ochiul pe ecranul colegului meu trivalent f, g, j) ca sa ma auto-felicit in interior.
    Poate ar trebui sa iti gasesti si tu pe cineva care scrie php sau, si mai bine, objective C :)

    1. Pentru mine faptul că există și lucruri mai rele pe lume nu e foarte reconfortant. Pentru eclipsele ăla tinerii de care zici nu dau niciun ban deci pot avea cam tot atîtea pretenții…

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *