Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

tag: C#

La più strana caratteristica di un linguaggio di programmazione

Stavo consultanto l'insostituibile StackOverflow quando mi cade l'occhio su una bizzarra domanda posta da un utente.

L'utente chiede quale sia la più strana caratteristica di un linguaggio di programmazione che vi sia capitato di incontrare.

La risposta più votata riguarda il linguaggio C, dove si può far riferimento ad un elemento di un array sia in questo modo:

a[10]

che in quest'altro:

10[a]

Il secondo metodo appare per lo meno inusuale, ma è più chiaro se pensiamo, come dice un utente nei commenti, che in C gli array non sono altro che puntamenti in ...

Le closures e C#

Chi è abituato ad usare internet per tenersi aggiornato, o chi legge gli ultimi libri sui linguaggi di programmazione, avrà sicuramente già incontrato il termine "closure".

Che cos'è una closure? Se siete arrivati qua con una ricerca su Google vi sarete già imbatutti in mille definizioni (un pò come mi accadde quando fui io a cercarle per la prima volta). Un esempio di closure dovrebbe facilitare le cose:

1
2
3
4
5
List<Video> FindAllShorterThen(List<Video> videos, int maxMinutes)
{  
 return lessons.FindAll(delegate(VideoLesson lesson)    
     { return lesson.Duration < maxMinutes; } );  // <-- closure
}

Per chi conosce il C# l'esempio ...

Conversioni tra System.Xml e System.Xml.Linq

Riporto qui una utile classe per la conversione di elementi System.Xml a System.Xml.Linq e viceversa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System.Xml;
using System.Xml.Linq;

/// <summary>
/// Provides extension methods for simple conversion between System.Xml and System.Xml.Linq classes.
/// </summary>
public static class XmlLinqConversionExtensions {

    /// <summary>  
    /// Converts an XDocument to ...

Conversione di array e liste in stringhe csv (comma separated)

Mi trovo spesso a dover convertire liste, collections o array in stringhe con valori separati da virgola (csv). Con LINQ, questo può essere fatto in modo elegante ed efficiente su qualsiasi collection che implementi IEnumerable usando il metodo Join() della classe string:

string csvString = string.Join(",", from item in MyList select item.Value);

oppure per .net 3.5:

string csvString = string.Join(",", (from item in MyList select item.Value).ToArray());

Per le versioni precedenti di .Net che non supportano LINQ (< 3.5), il metodo più efficiente è usare la classe StringBuilder:

 1
 2
 3
 4
 5
 6
 7
 8
 9 ...

Passaggio di un parametro DateTime ad un WebMethod (ASMX) con jQuery ajax

Non esiste molta documentazione su come scambiare valori DateTime tra javascript e un servizio .net (asmx). Un grande lavoro l'ha fatto Adam Schroder nel suo post sull'argomento

Un servizio ASP.NET decorato con il tag ScriptService accetta un datetime nel formato:

"\/Date(x)\/"

dove x è il valore ritornato dal metodo getTime() dell'oggetto javascript Date. Un parametro DateTime ha quindi più o meno questo aspetto quando viene passato nel parametro "data" di una chiamata al metodo ajax di jQuery:

'{ dateparam: "\\\/Date(' + (new Date()).getTime() + ')\\\/" }'

(Prefissiamo con il carattere di escape "\" anche la barra normale "/").

Il web service ...

C#: uso di delegate anonimi per le ricerche degli elementi di List

Un metodo veloce per ricercare qualcosa all'interno di una List è fare uso del metodo Find() passando come parametro un anonymous delegate. Ad esempio per ricercare un testo in una lista di string:

1
2
3
List<string> stringList = someStringList;
string result = stringList.Find( 
  delegate(string s) { return s == "testo da ricercare"; });

Il metodo Find() di List esegue una ricerca lineare, partendo dal primo elemento della lista, chiamando ad ogni iterazione il delegate e fermandosi quando trova un match (cioè quando il delegate ritorna True).

Il delegate anonimo può essere utilizzato anche con gli altri metodi per le ricerche ...

Upload di file di grandi dimensioni in .net: uploadify

Cercando un oggetto solido ed efficiente per eseguire l'upload dei file in .net con annessa visualizzazione della progress bar, ho rispolverato Uploadify, che avevo scartato qualche mese fa per una esigenza simile (allora usai il modulo di Darren Johnstone assieme alla progress bar di Matt Berseth). 

Uploadify usa flash e javascript (jquery in particolare) per facilitare le operazioni di selezione ed upload del file, rendendo l'esperienza dell'utente fluida e piacevole. Il fatto che Flash sia installato sul 95% dei browser lo rende una buona scelta per diffusione e compatibilità. Il fatto che Flash non sia disponibile su ...

Automazione dei test per le applicazioni web attraverso l'interazione con i browser: Watir e Selenium

Come faccio ad eseguire un test automatico dell'interfaccia utente di una applicazione web, o un test su sito che fa uso intensivo di Ajax?

Esiste a proposito una famiglia di strumenti per l'automazione dei test basati sull'interazione con i browser, con i quali è possibile simulare le operazioni che un utente compie sulla pagina web nella quale sta navigando.

In base alla mia esperienza, tra i toolkit appartenenti a questa famiglia, solo due sono veramente all'altezza, Watir e Selenium.

Watir e Selenium

Watir (si pronuncia come la parola inglese "water") è un prodotto maturo, nato nel ...