Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-03-2008, 02:19   #181
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da DioBrando Guarda i messaggi
Se tra le fonti che hai guardato in rete ti è capitata quella di Wikipedia puoi leggere come in realtà l'avesse smentita già prima.
In ogni caso permettimi ma il fatto che appaia su di una intervista nel 96 non significa che prima non l'abbia mai smentita.
Non tutte le dichiarazioni vengono riportate, catalogate e soprattutto per intero.

Probabilmente alla ennesima volta in cui gli hanno stracciato i maroni ha voluto una volta per tutte precisarla.

In ogni caso qui si può leggere un estratto, da cui cito:

When IBM introduced its PC in 1981, many people attacked Microsoft for its
role. These critics said that 8-bit computers, which had 64K of address space,
would last forever. They said we were wastefully throwing out great 8-bit
programming by moving the world toward 16-bit computers.

We at Microsoft disagreed. We knew that even 16-bit computers, which had 640K
of available address space, would be adequate for only four or five years.
Sapevano già da allora che avrebbero creato Windows...
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 08:46   #182
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da DioBrando Guarda i messaggi
Probabilmente alla ennesima volta in cui gli hanno stracciato i maroni ha voluto una volta per tutte precisarla.
Mi sa che e' proprio cosi'.
Comunque chiunque ne capisce qualcosa di architetture e Sistemi Operativi capisce che quella frase lascia il tempo che trova.
Come ho detto prima, qualunque cosa avesse o non avesse detto Bill Gates al tempo e' ininfluente.
Avrebbe potuto pensare che 640k andavano bene, come anche che andassero bene 64k o non bastassero 4GB.
Tanto la decisione su quanta RAM poter montare e quindi indirizzare con il suo DOS non stava a lui ma alla Intel e alla IBM.

La quale non ha limitato l'indirizzamento a 1MB perche' gli piaceva cosi'.
Semplicemente se oggi portare 1 segnale e poi anche un pin in piu' di Address Bus costa qualcosa, allora costava molto ma molto di piu'.
Non per niente il databus dell 8086 era addirittura in comune con l'address bus (con somma gioia dei memory controller)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 09:53   #183
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Mi sa che e' proprio cosi'.
Comunque chiunque ne capisce qualcosa di architetture e Sistemi Operativi capisce che quella frase lascia il tempo che trova.
Come ho detto prima, qualunque cosa avesse o non avesse detto Bill Gates al tempo e' ininfluente.
Avrebbe potuto pensare che 640k andavano bene, come anche che andassero bene 64k o non bastassero 4GB.
Tanto la decisione su quanta RAM poter montare e quindi indirizzare con il suo DOS non stava a lui ma alla Intel e alla IBM.
In primis a Intel, che ha messo il limite di 1MB per il processore. La frittata l'ha completata IBM, organizzando la memory map in maniera decisamente stupida, arrivando a occupare la memoria alt dal segmento B0000 in poi; non contenta della cazzata, con la scheda grafica EGA ha pensato bene di scendere fino al segmento A0000.
Quote:
La quale non ha limitato l'indirizzamento a 1MB perche' gli piaceva cosi'.
Semplicemente se oggi portare 1 segnale e poi anche un pin in piu' di Address Bus costa qualcosa, allora costava molto ma molto di piu'.
Non per niente il databus dell 8086 era addirittura in comune con l'address bus (con somma gioia dei memory controller)
Esattamente, ma quella gestione astrusa dei segmenti se la poteva anche risparmiare: è una cazzata immane.

Internamente poteva benissimo usare i registri di segmento come facevano tante altre architetture a 16 bit dell'epoca: come BANCHI di memoria e non come aree sovrapponibili. Quindi indirizzando "linearmente" la memoria (potenzialmente fino a 4GB internamente).

Tra l'altro non avrebbe avuto neppure la necessità di aggiungere un sommatore in ogni parte del chip in cui doveva esserci la logica di generazione dell'indirizzo della memoria fisica, risparmiando ulteriori transistor.

Esternamente poi poteva tranquillamente continuare limitare il numero di bit di indirizzamento a 20, e continuare a indirizzare soltanto 1MB di memoria, come facevano già altre architetture (esempio la Motorola, che col 68000 "troncava" gli indirizzi a 24 bit e col 68008 a 20 bit, e col 68010 a 30 bit, ma internamente rimanevano sempre a 32 bit).

Alla Intel gli ingegneri dovevano essere masochisti autolesionisti, visto che hanno continuato a fare cazzate anche con gli altri processori (vedi 286, a che indirizzava virtualmente 24 bit: gran passaggio quello da 20 a 24 bit, non c'è che dire).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 09:55   #184
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
...
Quoto tutto. L'ho sempre pensato anche io.
Anche se forse adesso avremmo ancora i 16bit e neppure i 32, altro che i 64.
E magari saremmo tutti piu' contenti e piu' veloci. Ma forse no. Boh.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2008, 10:04   #185
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Il passaggio ai 32 bit sarebbe arrivato ugualmente, e probabilmente negli stessi tempi: è il codice che spinge verso certe soluzioni architetturali, man mano che le esigenze cambiano (e si "complicano" le cose da fare).

Per il resto, sarei stato MOLTO più felice sicuramente da un'architettura "più lineare", e penso che anche la velocità ne avrebbe giovato (un'architettura meno complicata è più facile da "spingere" in termini di velocità di esecuzione).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2008, 03:22   #186
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da DioBrando Guarda i messaggi
3) Effects Model
§ Purely Functional is the right default
§ Imperative constructs are vital features
that must be exposed through explicit
effects-typing constructs
:
questo invece è il punto che mi intriga di più e che si ricollega a quel che ha scritto mindwings.
Quelle sopra non sono affermazioni di poco conto.
La prima dice ad esempio che non si deve adeguare solo il programmatore, ma anche il framework che usa (e, in conclusione, la libreria standard del linguaggio), perche' altrimenti farlo diventa una perdita di tempo che non porta vantaggi. E' se non altro fattibile, in generale, senza portare tanti cambiamenti al linguaggio. Un buon esempio e' il lisp, che viene geralmente considerato funzionale, ma in realta' e' multiparadigma (il goto esiste anche in lisp ), solo che ha come "right default" l'approccio funzionale. In generale ci cascano dentro un po' tutti i linguaggi funzionali, compresi quelli non puri, visto che, quando non si tratta di side-effects, tendono verso questo approccio.
La seconda e' ben ancora peggiore, in quanto dice ci deve essere una distinzione netta tra funzioni(/metodi) con side effects e quelle che non ce l'hanno, che una funzione che prende una stringa e la converte in numero e' sostanzialmente diversa da una che quel numero te lo ritorna da un file, perche' quest'ultima interagisce con il mondo esterno e non puoi usarla quando vuoi in vece della prima.
Questa distinzione la fanno pochissimi linguaggi mainstream (Haskell e mi sembra Clean) e, oltre a cambiare radicalmente il modo in cui ci programma, e' difficile da aggiungere in modo ragionevole ad un linguaggio senza cambiarlo profondamente
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2008, 10:17   #187
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Ma poi un linguaggio puramente funzionale è ben difficile da programmare: ti costringe a tanti "contorsionismi" che con linguaggi già non puramente funzionali (è sufficiente l'operazione di assegnazione per rendere la vita più facile ) si risolvono senza troppi sbattimenti di testa.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2008, 19:15   #188
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Ma poi un linguaggio puramente funzionale è ben difficile da programmare: ti costringe a tanti "contorsionismi" che con linguaggi già non puramente funzionali (è sufficiente l'operazione di assegnazione per rendere la vita più facile ) si risolvono senza troppi sbattimenti di testa.
Non e' difficile, e' diverso.
Alcune cose sono piu' complesse, altre piu' semplici.
In un linguaggio puramente funzionale alcune cose come iteratori, revisioning (tenere vecchie versioni di un oggetto) vengono praticamente gratis. La memoria viene allocata e condivisa tra oggetti diversi automaticamente. Altre cose sono proprio impossibili da ottenere o richiedono algoritmi differenti (le code ad esempio)
Ovvio che per chi e' abituato in modo diverso sono contorsionismi.
In ogni caso trovo che una volta presa mano i vantaggi siano notevoli, soprattutto quando ci si rende conto di quanto sforzo mentali porti via il dover considerare i side effects.

Attenzione comunque che sopra non si parlava di linguaggi puramente funzionali, ma di preferire la programmare in modo puramente funzionale quando possibile.
Quel che volevo dire quanto questo sia possibile dipende molto dal supporto che viene dal linguaggio e dalla sua libreria.
In python ad esempio possiamo considerare la list comprehension come qualcosa di puramente funzionale, ma d'altra parte il metodo sort delle liste non lo e', per cui uno dovrebbe farsi sempre una copia della lista prima di ordinarla.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2008, 22:25   #189
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Esattamente, ma spesso si opera in locale, cioé non è necessario mantenere anche la vecchia lista.

Per un approccio puramente funzionale basta usare la funzione built-in sorted().

Comunque all'università non mi sono trovato male con la programmazione funzionale, e il mio prof. di linguaggi di programmazione (il mitico Giovanni Gallo ) s'è prodigato molto per farci apprezzare le meraviglie di questo paradigma con Scheme.

Debbo dire che ho apprezzato e mi affascina molto, tanto che spesso tendo a esagerare (e Fran per questo mi prende a mazzate un giorno sì, e l'altro pure ).

Soprattutto mi affascina il fatto che con la programmazione funzionale pura è più facile testare la correttezza del codice.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 10:50   #190
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Per ritornare in topic ho trovato goto anche nel codice per creazione dei processi e in quasi tutti i metodi dei Socket.

Ah e chi sostiene che con la programmazione ad oggetti eviti gli if?
Vedo sempre controlli del tipo
Codice:
if (nonRispettaIRequisiti) 
throw EccezioneDiQualcheTipo()
E non potrebbe essere altrimenti.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:28   #191
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Ne avevemo già parlato del perché serva almeno un if: http://www.hwupgrade.it/forum/showpo...4&postcount=48
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:38   #192
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Ne avevemo già parlato del perché serva almeno un if: http://www.hwupgrade.it/forum/showpo...4&postcount=48
Lo so benissimo, solo che ho letto tante volte discorsi del tipo "con la programmazione OOP eviti gli if", oppure "io non uso gli if ma mi affido alle eccezioni".

E quotando il tuo post:
Quote:
La prassi con C & affini è quella della catena di if, dal primo che l'ha rilevata fino all'ultimo che la deve poi gestire. Tutti if condizionali, che, come sai, sono i peggiori da trattare per un processore.
Anche la prassi del C# è quella di una catena di if per vedere quale possibile eccezione sollevare.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:47   #193
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non è certo la stessa cosa che ripetere gli n controlli necessari per tutti i "livelli"...

Comunque quelli che riporti sono ovviamente slogan: la programmazione OOP non può eliminare gli if, ma certamente contribuisce, se ben usata, a ridurli anche di molto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:51   #194
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Anche la prassi del C# è quella di una catena di if per vedere quale possibile eccezione sollevare.
Assolutamente no. Dipende dal design del codice.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:52   #195
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fek Guarda i messaggi
Assolutamente no. Dipende dal design del codice.
E questo design come lo definiresti?

Codice:
    if (this.disposed)
    {
        throw new ObjectDisposedException(base.GetType().Name);
    }
    if (!string.IsNullOrEmpty(startInfo.UserName) || (startInfo.Password != null))
    {
        throw new InvalidOperationException(SR.GetString("CantStartAsUser"));
    }
    if ((startInfo.RedirectStandardInput || startInfo.RedirectStandardOutput) || startInfo.RedirectStandardError)
    {
        throw new InvalidOperationException(SR.GetString("CantRedirectStreams"));
    }
    if (startInfo.StandardErrorEncoding != null)
    {
        throw new InvalidOperationException(SR.GetString("StandardErrorEncodingNotAllowed"));
    }
    if (startInfo.StandardOutputEncoding != null)
    {
        throw new InvalidOperationException(SR.GetString("StandardOutputEncodingNotAllowed"));
    }
    if (startInfo.environmentVariables != null)
    {
        throw new InvalidOperationException(SR.GetString("CantUseEnvVars"));
    }
Per non parlare poi di questo

Codice:
ShellExecuteHelper helper = new ShellExecuteHelper(executeInfo);
        if (helper.ShellExecuteOnSTAThread())
        {
            goto Label_0304;
        }
        int errorCode = helper.ErrorCode;
        if (errorCode != 0)
        {
            goto Label_0282;
        }
        long hInstApp = (long) executeInfo.hInstApp;
        if (hInstApp <= 8L)
        {
            if (hInstApp < 2L)
            {
                goto Label_0276;
            }
            switch (((int) (hInstApp - 2L)))
            {
                case 0:
                    errorCode = 2;
                    goto Label_0282;

                case 1:
                    errorCode = 3;
                    goto Label_0282;

                case 2:
                case 4:
                case 5:
                    goto Label_0276;

                case 3:
                    errorCode = 5;
                    goto Label_0282;

                case 6:
                    errorCode = 8;
                    goto Label_0282;
            }
        }
        if ((hInstApp <= 0x20L) && (hInstApp >= 0x1aL))
        {
            switch (((int) (hInstApp - 0x1aL)))
            {
                case 0:
                    errorCode = 0x20;
                    goto Label_0282;

                case 1:
                    goto Label_0276;

                case 2:
                case 3:
                case 4:
                    errorCode = 0x484;
                    goto Label_0282;

                case 5:
                    errorCode = 0x483;
                    goto Label_0282;

                case 6:
                    errorCode = 0x485;
                    goto Label_0282;
            }
        }
    Label_0276:
        errorCode = (int) executeInfo.hInstApp;
    Label_0282:
        throw new Win32Exception(errorCode);

Ultima modifica di tomminno : 07-04-2008 alle 14:57.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 14:57   #196
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da tomminno Guarda i messaggi
E questo design come lo definiresti?

Codice:
    if (this.disposed)
    {
        throw new ObjectDisposedException(base.GetType().Name);
    }
    if (!string.IsNullOrEmpty(startInfo.UserName) || (startInfo.Password != null))
    {
        throw new InvalidOperationException(SR.GetString("CantStartAsUser"));
    }
    if ((startInfo.RedirectStandardInput || startInfo.RedirectStandardOutput) || startInfo.RedirectStandardError)
    {
        throw new InvalidOperationException(SR.GetString("CantRedirectStreams"));
    }
    if (startInfo.StandardErrorEncoding != null)
    {
        throw new InvalidOperationException(SR.GetString("StandardErrorEncodingNotAllowed"));
    }
    if (startInfo.StandardOutputEncoding != null)
    {
        throw new InvalidOperationException(SR.GetString("StandardOutputEncodingNotAllowed"));
    }
    if (startInfo.environmentVariables != null)
    {
        throw new InvalidOperationException(SR.GetString("CantUseEnvVars"));
    }

Cosi':
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 15:07   #197
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fek Guarda i messaggi
Cosi':
Immaginavo
Peccato che quello è il modo in cui il .NET solleva le eccezioni.
E sinceramente non so come altro potrebbe fare.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 15:10   #198
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Immaginavo
Peccato che quello è il modo in cui il .NET solleva le eccezioni.
E sinceramente non so come altro potrebbe fare.
NullObject pattern e passa la paura. Il problema di quel codice non e' l'uso dei goto, ma chi lo ha scritto.
Se mi passa sotto gli occhi una catena di if cosi' ad una review, io non faccio fare il commit. E puo' piangere in tutte le lingue che vuole.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 15:54   #199
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fek Guarda i messaggi
NullObject pattern e passa la paura. Il problema di quel codice non e' l'uso dei goto, ma chi lo ha scritto.
Se mi passa sotto gli occhi una catena di if cosi' ad una review, io non faccio fare il commit. E puo' piangere in tutte le lingue che vuole.
Evidentemente chi sovrintende alla scrittura del .NET non è pignolo come te

Però scusa il null object pattern non solleva eccezioni, semplicemente crea un oggetto che non fa niente, ma come farebbe il framework a sollevarti una eccezione?
E' chiaro che deve controllare se un oggetto è nullo, se il valore è fuori range ecc...
E questo lo può fare solo con una catena di if che controlli che ogni parametro passato non sia nullo, ecc...
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2008, 16:45   #200
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Evidentemente chi sovrintende alla scrittura del .NET non è pignolo come te
Dipende dal team di sviluppo. Molti team di sviluppo in MS hanno degli ingegneri che si occupano solo del testing ed hanno potere di vita o di morte sul codice: se non rispetta gli standard qualitativi si riscrive. Purtroppo non tutti i team lavorano cosi'.

Quote:
Però scusa il null object pattern non solleva eccezioni, semplicemente crea un oggetto che non fa niente, ma come farebbe il framework a sollevarti una eccezione?
Easy.

Codice:
Redirector redirector = object.GetRedirector();
redirector.WriteSomething("bla bla bla");
Codice:
class NullRedirector: public Redirector
{
 ...
  void WriteSomething(String string)
  {
     throw NOOOOWAYException("WriteSomething called on a NullRedirector, you twat");
  }
}
Inizializzi object nel costruttore per usare un NullRedirector di default e se nessuno sovrascrive quella proprieta' ti viene sparata un'eccezione al momento dell'uso. Nessun if di mezzo.

Good design is simple and communicate intensions well and clearly.
fek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Manda la RAM Corsair in assistenza, rice...
ASUS ROG G1000 con 'AniMe Holo': saranno...
Un test di longevità ha messo alla prova...
Incat inizia i test dell'incredibile tra...
LG Sound Suite: al CES il sistema audio ...
Avengers Doomsday, il primo trailer &egr...
La crisi delle memorie non farà sconti a...
Il trailer più atteso dell'anno &...
I gamer vogliono i monitor OLED: sopratt...
Samsung alza l’asticella dei televisori ...
Energie rinnovabili 2025: quasi 42% del ...
Le auto elettriche volano in tutta Europ...
Nuovo look per la finestra Esegui su Win...
Rad Power Bikes è in bancarotta: ...
Cronos: The New Dawn diventa più ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v