luglio 2004 Blog Posts
In un post del 10/06 "The null type" e in un altro del 14/06 "The null type (un po' più chiaro)", mi chiedevo cosa vuol dire "the null type" nella frase "The type of a null-literal is the null type". Ecco la risposta di Dominic Cooney (bravi anche i suoi fratelli! :-) Joseph e Patrick)
"Re: Adrian Florea's comments on the 'null' type,
As I understand it, the 'null' type doesn't exist outside verification. So, for example, if you're doing verification and a control flow path that does ldnull merges with one that does ldstr, the verification algorithm merges the null type...
Mi sto chiedendo qual è la ragione per cui un metodo Main possa avere qualunque accessibilità... Quale sarebbe secondo voi il significato di un metodo Main non public? In Java, a partire dalla versione 1.4 è obbligatorio dichiararlo public.
C# Language Specification, 2nd edition
Java Language Specification, 2nd edition
10.1"Specifically, the execution environment can access the application’s entry point regardless of its declared accessibility and regardless of the declared accessibility of its enclosing type declarations."
12.1.4"The method main must be declared public, static, and void. It must accept a single argument that is an array of strings"
Incuriosito da questo frammento dal libro di Box & Sells (l'edizione italiana, p. 119):
"L'attributo [System.Flags] influenza anche l'implementazione di ToString in modo che la rappresentazione in stringa del valore sarà una lista separata da virgole dei nomi dei membri anziché del singolo membro.",
ho giocato un po'. Per esempio, questo snippet:
using System;class Foo{ [Flags] enum NaN { Non = 1, un = 2, numero = 4, reale = 8 } static void Main() { NaN f = NaN.Non | NaN.un | NaN.numero | NaN.reale; Console.WriteLine(double.NaN.ToString(new System.Globalization.CultureInfo("it-IT"))); Console.WriteLine(f.ToString().Replace(",", string.Empty)); Console.Read(); }}
stampa a video:
Non un numero realeNon un numero reale
Un esempio meno folle :-) lo trovate nella documentazione di System.FlagsAttribute.Continuando a giocare, sono partito da questo snippet:
using System;class...
Grande divertimento con questi quiz, ragazzi!... Alcune soluzioni sono degne di TheDailyWTF! (sì, WTF viene proprio da What The F**k :-))
Inizio come sempre con la soluzione a cui ho pensato io e lascio poi che le vostre parlino da sole:
private enum Roman{ UnFintoZeroRomano, I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, XIII, XIV, XV, XVI, XVII, XVIII, XIX, XX}public static string RomanEval(string r){ string[] split = r.Split('+', '-'); int t1 = (int)Enum.Parse(typeof(Roman), split[0]); int t2 = (int)Enum.Parse(typeof(Roman), split[1]); Roman ret = (Roman)(t1 - t2 * ((int)r[split[0].Length] - 44)); return ret.ToString().Substring(0, ret.ToString().Length % ((Roman)0).ToString().Length);}
Si può notare l'uso di una enum, l'espressione di ritorno calcolata in...
Vediamo questo come vi pare:
Data una stringa r che rappresenta un'operazione di addizione o di sottrazione tra due numeri da 1 a 10 scritti con cifre romane si chiede di implementare la funzione:
public static string RomanEval(string r)
che ritorni il risultato sempre in cifre romane o la stringa vuota in caso di risultato 0. Si presuppone che l'espressione sia sempre valida, non possa dare risultato negativo e nell'implementazione non si richiede una sua verifica. E' vietato l'uso di istruzioni di selezione, istruzioni di iterazione oppure dell'operatore condizionale "?"!
Alcuni esempi:
"VIII+II" dovrebbe ritornare "X";"IX-VI" dovrebbe ritornare "III";"III-III" dovrebbe ritornare string.Empty;
I vincitori e le...
Qualche visitatore del mio blog, magari osserverà leggendo questo paragrafo di Mark Brooks che i pattern non sono così astratti, che vale insomma la pena di passare il ponte che separa il modo in cui costruiamo adesso i nostri prototipi e il modo in cui dovremmo, con un po' di strategia e magari dopo qualche iterazione pensarli. interpretarli, in fine adattare quelli giusti al nostro problema. Non è una roba di facciata, di sola moda, un'ennesima minchiata per decorare il nostro CV ma, ricordatevi sempre questo, è un mezzo per raggiungere quello stato di cose fatte bene, quel mischio di...
Questi giorni, oltre al progetto .NET su cui normalmente lavoro, dedico parte del tempo a preparare un corso di JSP e Servlet che terrò da settembre a dicembre. Sono ormai quasi 2 anni e mezzo da quando ho lasciato Java e sono scappato con .NET in un'inaspettata e dolcissima avventura :-) Guardo quindi Java con altri occhi, adesso che devo rivedere la materia.
Per esempio, il metodo getParameterValues dell'interfaccia javax.servlet.ServletRequest ritorna java.lang.String[] :
public java.lang.String[] getParameterValues(java.lang.String name)
"Returns an array of String objects containing all of the values the given request parameter has, or null if the parameter does not exist."
Già il fatto di ritornare...
I vostri feedback sono un ottimo barometro della qualità, che vuol dire che quando piovono email da voi, il problema non è male, altrimenti vi annoia e non mi mandate - giustamente :-) - niente. Così è successo col sogno #1 (che ha avuto un'ottima accoglienza!) e sempre così è successo col sogno #2 (che avete trovato troppo semplice e quindi ha avuto molto meno successo...).
I vincitori stavolta sono due: Marco Poponi che mi ha mandato per primo una soluzione corretta (nel precedente quiz era arrivato quinto) e Massimo Prota secondo, che mi ha mandato una soluzione identica a quella...
Come promesso, ecco i vincitori con le loro soluzioni. Ricordiamoci prima il problema:
Dato un array di interi dispari, oddArray, che determina una sequenza monotona crescente, e un intero pari, evenValue, si chiede di implementare la funzione:
public static int IndexOfOddGreaterThanEven(int[] oddArray, int evenValue)
che ritorni l'indice del primo elemento di oddArray maggiore di evenValue. Nel caso evenValue > max(oddArray) la funzione ritorna -1. Si presuppone che i parametri siano validi e che quindi l'implementazione non richieda una verifica di questi. Nell'implementazione è vietato l'uso di istruzioni di selezione, istruzioni di iterazione oppure dell'operatore condizionale "?"!
Abbiamo un array ordinato di elementi (interi dispari)...
Dai vostri feedback ho capito che il test in questa forma vi piace di più rispetto a quello con risposta multipla - infatti così è più difficile sia per voi che per me, quindi più bello per tutti :-)
Vediamo allora il secondo test (per il primo, domani pomeriggio saprete i nomi di quelli che hanno risposto correttamente, finora 4, e le soluzioni, finora 3 diverse):
Dato un array di interi tutti diversi tra loro, array, e un intero value, si chiede di implementare la funzione:
public static bool IsInSmallest13(int[] array, int value)
che ritorni true se l'intero value è tra i 13 interi più...
Questo prendetelo come relax, così sbaglierete di sicuro :-)
Una divisione tra due variabili int, quante eccezioni può generare:
A. 1
B. 2
C. dipende dal contesto checked o unchecked
Finora abbiamo 3 soluzioni corrette e diverse tra loro - che dire, complimenti ragazzi! Saprete i nomi e le soluzioni commentate mercoledì pomeriggio. Nel frattempo aspetto le vostre altre soluzioni all'indirizzo che trovate nel post precedente - peccato che non vi possa offrire un premio, l'avreste meritato!
Mi adeguo alle vostre mail, inserendo una precisazione aggiuntiva: nell'implementazione è vietato l'uso di istruzioni di selezione, istruzioni di iterazione oppure dell'operatore condizionale "?"! Un'altra cosa che ho visto in alcune delle vostre mail: NON fatte il presupposto che gli interi dispari siano "consecutivi" (per esempio {9, 11, 13}) - la soluzione deve funzionare...
Preso dall'onda della soluzione più che strana per il mio problema di ieri, non mi sono reso conto di un vincolo necessario: l'array oddArray dev'essere una sequenza monotona crescente.Il testo adesso corretto del problema, diventa:
Dato un array di interi dispari, oddArray, che determina una sequenza monotona crescente, e un intero pari, evenValue, si chiede di implementare la funzione:
public static int IndexOfOddGreaterThanEven(int[] oddArray, int evenValue)
che ritorni l'indice del primo elemento di oddArray maggiore di evenValue. Nel caso evenValue > max(oddArray) la funzione ritorna -1. Si presuppone che i parametri siano validi e che quindi l'implementazione non richieda una verifica di questi.Nell'implementazione...
Se a qualcuno non ho fatto dormire di notte con la serie di Quiz Sharp (come mi hanno confessato alcuni dei partecipanti alla cena dopo il workshop del 22 giugno), allora vediamo cosa direte di questo problema, che pure a me che l'ho composto sembra bastardo :-)
Dato un array di interi dispari, oddArray, e un intero pari, evenValue, si chiede di implementare la funzione:
public static int IndexOfOddGreaterThanEven(int[] oddArray, int evenValue)
che ritorni l'indice del primo elemento di oddArray maggiore di evenValue. Nel caso evenValue > max(oddArray) la funzione ritorna -1. Si presuppone che i parametri siano validi e che quindi l'implementazione...