I 'guru' Art Haddad, Morten Nielsen, Rex Hansen presentano
Patterns and Best Practices for Building Applications with the ArcGIS API for Microsoft Silverlight: interessantissimo!!!
Preview:
Verrà rilasciata alla ESRI Developer Summit:
http://www.esri.com/news/releases/09_1qtr/silverlight.html
Vedi link per dettagli:
http://events.esri.com/bpc/2009/dev_agenda/index.cfm?fa=Session_Detail_Form&SessionId=136&ScheduleId=256
Silverlight API ArcGIS:
http://resources.esri.com/help/9.3/arcgisserver/apis/silverlight/help/index.html
mercoledì 11 febbraio 2009
ArcGIS API for Microsoft Silverlight
Etichette:
ArcGIS API Silverlight
sabato 7 febbraio 2009
Regular Expression
Le regular expression permettono di ricercare, tramite 'pattern' più o meno complessi, porzioni stringhe in un testo.
Creo la regular expression con questa utility http://www.regexbuddy.com/. Ce ne sono anche di gratuite (ad esempio http://www.ultrapico.com/Expresso.htm).
Testo:
12,345
1234,45
1234.45
1234567890
+12,34
-12,34
+1234
-1234
Attention: 1 2 3 test
The number 12345678901234567890 is quite long
1+1=2
troveremo:1234567890
In c# la classe che si occupa di questo è System.Text.RegularExpressions.Regex.
Creiamo una semplice form con una textbox ed un button per testare la regular expression.
Creo la regular expression con questa utility http://www.regexbuddy.com/. Ce ne sono anche di gratuite (ad esempio http://www.ultrapico.com/Expresso.htm).
Ad esempio vogliamo estrarre tutte le parole racchiuse tra parentesi quadre.
Invece di creare codice utilizzando ad esempio i classici substring, indexof ecc. abbiamo lo stesso risultato con poche righe di codice.
In un testo ad esempio vogliamo che non ci siano due parole uguali ripetute:
try
{
Regex regexObj = new Regex(@"\b(\w+)\s+\1\b");
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success)
{
// matched text: matchResults.Value
// match start: matchResults.Index
// match length: matchResults.Length
matchResults = matchResults.NextMatch();
}
}
catch(ArgumentException ex)
{
// Syntax error in the regular expression
}
Testo: 'This word is a repeated repeated word. A pluto pluto'
troveremo: repeated repeatedpluto pluto
Se è un intero ancorato:
troveremo: repeated repeatedpluto pluto
Se è un intero ancorato:
try {
Regex regexObj = new Regex(@"^\d+$");
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
// matched text: match Results.Value
// match start: matchResults.Index
// match length: matchResults.Length
matchResults = matchResults.NextMatch();
}
} catch (ArgumentException ex)
{
// Syntax error in the regular expression
}
Testo:
12,345
1234,45
1234.45
1234567890
+12,34
-12,34
+1234
-1234
Attention: 1 2 3 test
The number 12345678901234567890 is quite long
1+1=2
troveremo:1234567890
Etichette:
c#,
regular expression
giovedì 5 febbraio 2009
Currying in javascript
Una delle caratteristiche delle funzioni javascript è quello di poter essere nitificate.
In sostanza possiamo dichiarare una funzione dentro un'altra funzione.
Ad esempio:
La funzione child può accedere oltre alle sue variabili interne anche alle variabile test ed arg che sono definite fuori da essa.
Se invochiamo la main, ad esempio main ('Test:'), il risultato sarà un alert: 'Test: Esempio di clousures'.
In pratica la funzione child può accedere alle variabili della funzione padre ed alle sue.
La cosa interessante è che se la funzione restituisce la funzione child le variabili della main 'vivono' ancora nella funzione child:
il risultato sarà un alert: 'Test: Esempio di clousures'.
La funzione child può accedere alle variabili della funzione padre se sono state dichiarate locali. Abbiamo creato la cosiddetta closure.
Dall'esempio abbiamo anche visto che la funzione main definisce due variabili (arg e test) ma noi possiamo chiamare la funzione child senza passare parametri. Abbiamo trasformato una funzione con più parametri in una con meno (in questo caso con zero parametri). Questa tecnica è conosciuta come currying (in computer science).
Un altro esempio per far capire.
Potremmo semplicemente implementare nel prototipo:
Caricheremmo i primi argomenti e restituiremmo una funzione con, quindi caricati, questi argomenti. La funzione poi potrà essere utilizzata:
Esempio
In sostanza possiamo dichiarare una funzione dentro un'altra funzione.
Ad esempio:
La funzione child è stata nidificata nella funzione main.function main(arg)
{var test ="Esempio di closures";
function child () {
alert (arg + test);
}
child();}
La funzione child può accedere oltre alle sue variabili interne anche alle variabile test ed arg che sono definite fuori da essa.
Se invochiamo la main, ad esempio main ('Test:'), il risultato sarà un alert: 'Test: Esempio di clousures'.
In pratica la funzione child può accedere alle variabili della funzione padre ed alle sue.
La cosa interessante è che se la funzione restituisce la funzione child le variabili della main 'vivono' ancora nella funzione child:
Invece di invocare la funzione child all'interno della main la restituiamo e possiamo testare che le variabili continuano a 'vivere':function main(arg)
{var test ="Esempio di closures";
function child ()
{
alert (arg + test);
}
return child; //<---- return la funzione child()}
var child = main ('Test:');
child();
il risultato sarà un alert: 'Test: Esempio di clousures'.
La funzione child può accedere alle variabili della funzione padre se sono state dichiarate locali. Abbiamo creato la cosiddetta closure.
Dall'esempio abbiamo anche visto che la funzione main definisce due variabili (arg e test) ma noi possiamo chiamare la funzione child senza passare parametri. Abbiamo trasformato una funzione con più parametri in una con meno (in questo caso con zero parametri). Questa tecnica è conosciuta come currying (in computer science).
Un altro esempio per far capire.
Potremmo semplicemente implementare nel prototipo:
Function.prototype.curry = function() {
var fn = this, args = Array.prototype.slice.call(arguments);
return function()
{return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
};
Caricheremmo i primi argomenti e restituiremmo una funzione con, quindi caricati, questi argomenti. La funzione poi potrà essere utilizzata:
Esempio
function sum(x,y,z) {
return x+y+z;
}
function test() {
var a = sum.curry(2,5); // restituisce la funzione con x e y già precaricativar b = a(3);
alert(b.toString());}
Etichette:
javascript currying
Iscriviti a:
Post (Atom)