Clause "Using" di C#

Ho appena finito di ramazzare un po di codice in cui veniva pesantemente usata la clause "Using" di C#. Per chi non lo sapesse in pratica è un "sintactic sugar" che non fa altro che incapsulare dentro un try...catch...finally la variabile usata dentro lo using.

Quindi un costrutto del tipo

using(SqlConnection cn = new SqlConnection()) {..}
catch {...}

è equivalente a

SqlConnection cn;
try {
 cn=new SqlConnection();
}
catch {...}
finally {
in(null!=cn)
  cn.Dispose();
}

Il risultato è che il codice è più compatto, dal punto di vista dell'IL generato non cambia nulla.

Cambia però, a mio avviso, la mantenibilità del codice, perchè quella che era partito come un codice semplice nel giro di poche modifiche è diventato quello che segue

using(SqlConnection cn = new SqlConnection()) {
SqlCommand cm = cn.CreateCommand();
SqlTransaction tn = cn.BeginTransaction();
cm.Transaction = tn;
}
catch {...}
In pratica quindi mi ritrovo ad aver generato 2 nuove variabili (di oggetti che implementano la IDisposable) e di cui nessuno farà mai la dispose. Quindi o rimuovo la Using mettendo una try...catch...finally oppure (se, come nel caso in questione, in codice è stato fatto da una persona poco esperta) me lo scordo. Non dico che con la finally scritta in modo esplicito tutti poi si ricordano di fare la Dispose di tutto, ma se lo vedi scritto in maniera esplicita magari il dubbio ti viene...

Con tutto questo cosa voglio dire???? Nulla, ma i fatti mi cosano. E la Using è male. Ed in generale mettere in un linguaggio dei costrutti che non siano altro che "sintactic sugar" probabilmente è altettanto un male.

[Edit]
Un commento veloce sul discorso di indentare gli using. Scusa ma (è un parere personale) sto codice non mi piace:

using (SqlConnection cn = new SqlConnection()) {
  using (SqlCommand cm = cn.CreateCommand()) {
    using(SqlTransaction tn = cn.BeginTransaction ()) {
...
    }
  }
}

Ma ripeto, è un parere personale. Tecnicamente il problema può essere che implicitamente crea un "catch stack" abbastanza profondo, quindi nel momento in cui hai un'eccezione nello strato interno questa deve navigare 3 catch per risalire.

Sugli altri sono abbastanza d'accordo, se il programmatore zuccone non mi fa le Dispose si incasina in un modo e nell'altro, l'unica cosa è che se il codice è esplicito magari gli viene in mente di capire perchè esiste quella Dispose in fondo e magari si istruisce...

Defy challenges

http://www.defyallchallenges.com/

A parte che non sono ancora riuscito a capire cosa sia sto sito  e a che cosa possa servire (e se qualcuno me lo spiega in un commento ne sarei grato) posso fare un appunto??? Ma cavolo, Microsoft ha appena rilasciato SilverLigth 1.0 ed il sito è fatto in Flash???? Ma daiiiiiiii....

Colloqui

In questo periodo sto visionando parecchi Curriculum per cercare del personale ed una delle prime cose che faccio, non appena ho il nome del candidato (more on this later) è fare una ricerca su Google per vedere se trovo qualche informazione su di lui.

Una delle cose che mi sta impressionando, in modo negativo, è il numero di persone la cui presenza in rete è totalmente nulla. Dal momento che sto cercando dei developer questo secondo me è un punto fondamentalmente negativo. Capisco non avere un blog, ma che a nome di un candidato non si trovi un post su un forum, un newsgroup o una singola pagina in cui viene menzionato il suo nome è qualcosa che mi lascia sempre abbastanza basito. Poi magari gli fai un colloquio e scopri che è fondamentalmente un buon candidato, ma questo tarlo rimane, perchè una persona che fa l'informatico di lavoro non ha traccia di lui in rete???

L'altra cosa imbarazzante è lavorare con le agenzie di ricerca personale, che hanno preso questa abitudine di mandare i CV della gente senza il nome completo, per cui si fanno delle telefonate al limite dell'assurdo del tipo "ho visto il CV, mi interesserebbe parlare con Giovanni D., invece dovresti mandare il CV di Alberto P. al mio collega". Quando poi hai due candidati che si chiamando Michele D. e Michele B. la cosa sfocia nel comico...

[Edit] PS: qualcuno nei commenti mi fa notare che nei post si usa il nickname. Corretto, però posso darvi un consiglio? Il nickname tenetevelo quando discutete nel forum della gilda di Warcraft, quando scrivete e rispondete su dei forum tecnici tenete nome e cognome veri, che magari poi si fa bella figura...

[Riedit] Miiii quanti commenti...
Uso di Internet durante il tempo di lavoro: personalmente trovo che se uno gira in internet sul posto di lavoro non sia un problema. Ha dei task da fare in un certo tempo, li fa e li fa bene? Se anche tornato da pranzo mi guarda il sito di Repubblica non è un problema. Idem per i forum o i post. Adesso sono le 5.37, sono reduce da qualche ora di riunione pesissima, se invece di fumare una sigaretta o farmi un caffè scrivo questa risposta è un problema? Spero proprio di no, spero anzi che in un futuro qualcuno che ha letto questa cosa faccia un colloquio da me e si ricordi che firmando per noi avrebbe un capo appassionato e che partecipa, perchè la cosa vale nei due sensi, io farò delle ricerche su Google sul candidato prima che questo venga a fare il colloquio da me, ma lui poi è assolutamente libero di farle su di me per capire che tipo sono, considerando che se cercate su Google Groups trovate dei miei post del 1990 direi che da leggere ne ha parecchie...
Per Sudna: non ho capito il tuo messaggio, ma forse è meglio così...