Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2008, 18:25   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#/2.0]Restituire valore solo se non nullo

allora, leggendo diversi vostri post, sto provando anche io ad aderire alla campagna anti-if ...

ho questa situazione:

Codice:
private double GetCellValue(int cellNumber)
{
    return double.Parse(grid.CurrentRow.Cells[cellNumber].Value.ToString());
}
Sembrerebbe ok... se non fosse che:

Se trova un valore nullo, ovvero una cella vuota, mi sparafracassa i maroni chiedendomi di creare una nuova istanza dell'oggetto..

allora, dovrei fare così:

Codice:
private double GetCellValue(int cellNumber)
{
    if(grid.CurrentRow.Cells[cellNumber].Value != null)
       return double.Parse(blabla)
    else
    return 0.00
}
ma così, non aderisco + alla campagna anti-if

Come potrei risolvere?

Grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 18:43   #2
wizard1993
Senior Member
 
L'Avatar di wizard1993
 
Iscritto dal: Apr 2006
Messaggi: 22462
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
ma così, non aderisco + alla campagna anti-if
qusta è la prima volta la sento nominare
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza
wizard1993 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 18:48   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
http://www.metodiagili.it/campagna-anti-if/index.htm

__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 19:06   #4
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
con il try - catch?
Ma sempre se è un campo obbligatorio e quindi è giusto che debba lanciare un eccezione, altrimenti se è un campo facoltativo devi comunque usare l'if a meno di non riscriverti il controllo di windows in ottica "anti-if" così ad occhio...
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 19:12   #5
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Codice:
private double GetCellValue(int cellNumber)
{
   try
   {
       return double.Parse(grid.CurrentRow.Cells[cellNumber].Value.ToString());
   }
   catch
   {
       return 0;
   }
}
PS: Che cazzata la campagna anti-if. Va bene non usarli quando non servono, ma qua si esagera...
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2008, 20:06   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Codice:
private double GetCellValue(int cellNumber)
{
   try
   {
       return double.Parse(grid.CurrentRow.Cells[cellNumber].Value.ToString());
   }
   catch
   {
       return 0;
   }
}
PS: Che cazzata la campagna anti-if. Va bene non usarli quando non servono, ma qua si esagera...
Beh, più che altro a me serve per studio, non per un'applicazione reale

chiedo venia
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 07:34   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Usare double.TryParse?
Così nascondi l'if sotto il tappeto (del framework).
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 07:53   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
PS: Che cazzata la campagna anti-if. Va bene non usarli quando non servono, ma qua si esagera...
Il problema è che è indirizzata male.
La maggior parte degli if non si usano per verificare il tipo di un oggetto ma per stabilire se è nullo o ha un valore ben definito.

Senza gli if in questo caso il codice è meno leggibile e almeno con il C# finisce che per fare veloce il codice si legge al contrario perchè prima viene il codice che andrebbe dentro l'if/else e poi il check della condizione.
In ogni caso è sempre più lungo da scrivere di un banale if.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 09:22   #9
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Il problema è che è indirizzata male.
La maggior parte degli if non si usano per verificare il tipo di un oggetto ma per stabilire se è nullo o ha un valore ben definito.
beh, ma se gli oggetti li hai creati tu puoi sempre usare il null-pattern per evitare il controllo sul null o una mappa per controllare i vari valori.
Il problema è quando, come in questo caso, si devono utilizzare componenti che *possono* restituire null anche in casi non eccezionali.
Se, ad esempio, alla MS avessero previsto un flag "obbligatorio" per quel componente, e avessero consentito di associarlo ad un ben determinato tipo di dato, anzichè utilizzare il generico string, sarebbe stato possibile restituire il valore di default corretto e si sarebbe potuto eliminare quell'if.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 10:07   #10
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
beh, ma se gli oggetti li hai creati tu puoi sempre usare il null-pattern per evitare il controllo sul null o una mappa per controllare i vari valori.
Null non è l'unico valore da controllare, e usando le mappe o delegati il codice è certamente molto meno chiaro di un if.
Me ne sono accorto quando mi sono imposto di creare un parser per i log di pureFTP assolutamente senza if.
E' velocissimo ad eseguire (che era l'obiettivo principale), quanto al codice si legge al contrario, inoltre ci ho messo molto più tempo a scriverlo.
Per quanto mi riguarda l'if lo uso in casi come:
if (i < x)
if (IsEnabled())

E spesso quando si hanno a che fare con intervalli di valori creare le mappe diventa complicato.

Quote:
Il problema è quando, come in questo caso, si devono utilizzare componenti che *possono* restituire null anche in casi non eccezionali.
Se, ad esempio, alla MS avessero previsto un flag "obbligatorio" per quel componente, e avessero consentito di associarlo ad un ben determinato tipo di dato, anzichè utilizzare il generico string, sarebbe stato possibile restituire il valore di default corretto e si sarebbe potuto eliminare quell'if.
double.Parse non può restituire null semplicemente perchè ritorna un double che non è un oggetto. Al limite solleva FormatException o ritorna 1.0
Per questo esiste il metodo TryParse che restituisce true o false se la conversione è avvenuta con successo.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 10:54   #11
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Null non è l'unico valore da controllare, e usando le mappe o delegati il codice è certamente molto meno chiaro di un if.
Me ne sono accorto quando mi sono imposto di creare un parser per i log di pureFTP assolutamente senza if.
E' velocissimo ad eseguire (che era l'obiettivo principale), quanto al codice si legge al contrario, inoltre ci ho messo molto più tempo a scriverlo.
Per quanto mi riguarda l'if lo uso in casi come:
if (i < x)
if (IsEnabled())

E spesso quando si hanno a che fare con intervalli di valori creare le mappe diventa complicato.



double.Parse non può restituire null semplicemente perchè ritorna un double che non è un oggetto. Al limite solleva FormatException o ritorna 1.0
Per questo esiste il metodo TryParse che restituisce true o false se la conversione è avvenuta con successo.
Ma infatti io non mi riferivo al double.parse, ma al componente di windows da cui prendeva la stringa che poi deve essere parsata.
Se anzichè usare questo meccanismo si fosse utilizzato un componente cosciente del tipo di dato che dovrà contenere, allora si sarebbe potuta eliminare la necessità dell'if perchè semplicemente non sarebbe stata necessaria alcuna conversione dato che il componente avrebbe restituito direttamente un double o un int o qualsiasi altra cosa a seconda del tipo di dato.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 11:50   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
facendo un pò di chiarezza:

l'oggetto in questione è una griglia, e l'operazione che devo svolgere è una banale somma o differenza tra i valori contenuti nelle celle.

Il fatto è che questa operazione deve avvenire in corrispondenza di un evento, ovvero quando si lascia la cella corrente per scrivere in quella successiva.

Sono quindi incappato in questo problema, ovvero, lasciando la cella corrente, supponiamo la cella 3, che contiene 12,79, andando in quella successiva (quindi già sono nell'evento di EndEdit) mi ritrovo già che 12,79 cerca di sottrarsi o addizionarsi ad un valore ancora non presente nell'evento BeginEdit della cella.

Avrei potuto risolvere il tutto comodamente settando a zero il valore di default di ogni cella, ma, ripeto, dato che è solo per studio, cerco di vedere lo stesso problema sotto diversi punti di vista, cercando di volta in volta di non adottare quello che già conosco, ma cercando di fare qualcosa di nuovo a scopo didattico
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 11:55   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
Ma infatti io non mi riferivo al double.parse, ma al componente di windows da cui prendeva la stringa che poi deve essere parsata.
Se anzichè usare questo meccanismo si fosse utilizzato un componente cosciente del tipo di dato che dovrà contenere, allora si sarebbe potuta eliminare la necessità dell'if perchè semplicemente non sarebbe stata necessaria alcuna conversione dato che il componente avrebbe restituito direttamente un double o un int o qualsiasi altra cosa a seconda del tipo di dato.
Una griglia generics in cui specificare per ogni cella il tipo di contenuto non è propriamente fattibile.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 12:00   #14
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
facendo un pò di chiarezza:

l'oggetto in questione è una griglia, e l'operazione che devo svolgere è una banale somma o differenza tra i valori contenuti nelle celle.

Il fatto è che questa operazione deve avvenire in corrispondenza di un evento, ovvero quando si lascia la cella corrente per scrivere in quella successiva.

Sono quindi incappato in questo problema, ovvero, lasciando la cella corrente, supponiamo la cella 3, che contiene 12,79, andando in quella successiva (quindi già sono nell'evento di EndEdit) mi ritrovo già che 12,79 cerca di sottrarsi o addizionarsi ad un valore ancora non presente nell'evento BeginEdit della cella.

Avrei potuto risolvere il tutto comodamente settando a zero il valore di default di ogni cella, ma, ripeto, dato che è solo per studio, cerco di vedere lo stesso problema sotto diversi punti di vista, cercando di volta in volta di non adottare quello che già conosco, ma cercando di fare qualcosa di nuovo a scopo didattico
Ma non ti viene sollevata nessuna eccezione?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 12:49   #15
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Una griglia generics in cui specificare per ogni cella il tipo di contenuto non è propriamente fattibile.
perchè no?
Ad esempio utilizzando una DataGridView puoi già specificare il tipo di dato di ogni colonna, e non mi pare ci siano problemi di sorta...
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 04-06-2008, 13:44   #16
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Ma non ti viene sollevata nessuna eccezione?
Ovviamente si facendo come sto facendo io, ovvero senza dire a priori al datagridview che tipo di valori ci saranno nelle celle.

P.S.:

con il datagridview puoi tranquillamente settare il tipo di valore per ogni colonna.
Dispone di eventi che ne facilitano moltissimo l'utilizzo.

Eventi appunto... che NON sto usando ma solo per imparare
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Iliad: si consolida la partnership tecno...
Il SoC a 2 nm di Samsung non sfigura nel...
Prezzo shock per i Galaxy Buds FE + nuov...
Il nuovo SoC di Qualcomm vuole stupire: ...
Offerta lampo per pulire l'auto: aspirap...
I robotaxi di Amazon entrano in azione: ...
ECOVACS DEEBOT T50 PRO OMNI Gen2 domina ...
iPhone 17 Pro su Amazon: tutti i colori,...
Disney Plus da 2,99 euro al mese per 3 m...
Nuovo test di accensione dei motori per ...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
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: 12:11.


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