Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2008, 19: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, 19: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, 19: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, 20: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, 20: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, 21: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, 08: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, 08: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, 10: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, 11: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, 11: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, 12: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, 12: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, 13: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, 13: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, 14: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


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
NIU inaugura un nuovo store a Milano: ap...
Applicazioni Mission-Critical: alla scop...
PC portatile Lenovo tuttofare a 499€: or...
ECOVACS DEEBOT T80 OMNI vs T50 OMNI Gen2...
TV Hisense e TCL da 43'' (ma non solo): ...
Collins, "vibe coding" è...
Record di copie vendute per Red Dead Red...
Halo Infinite: in arrivo l'ultimo grande...
TV LG OLED 2025: Amazon fa sconti al che...
Forse, finalmente, ci siamo? Alcuni rumo...
Smart home più facile ed economic...
Motorola edge 50 neo in svendita, 202€: ...
Cina e Paesi Bassi verso la distensione ...
'Senza TSMC non ci sarebbe NVIDIA': Jens...
Fumo di sigaretta e sporco per 17 anni: ...
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: 10:24.


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