Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-10-2008, 10:48   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#]Ridurre gli If

Ciao a tutti

Anche io nel mio piccolo cerco di aderire alla campagna anti-if

La mia piccola e semplice situazione è questa:

Un form di login, due caselle di testo per username e password e
i due classici bottoni di login e annulla.

Ora, il primo controllo che devo fare quando si clicca sul 'login' è che i due textbox non siano vuoti e quindi, mi piacerebbe trasformare questo:

Codice:
if(txtUsername.Text.Length != 0 && txtPassword.Text.Length != 0)
{
   //blablacode
}
Prima di andare avanti, mi piacerebbe sapere da voi come far funzionare questa semplice cosa senza l'ausilio degli if.

N.B.: La mia domanda non ha scopi di efficienza o altro

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 13-10-2008, 11:11   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Ciao.
Innanzitutto io spezzerei una lancia pro-if, nel senso che non e' detto che un programma senza if sia sempre migliore o piu' leggibile di uno con qualche if nel posto giusto.
Ma qui in effetti qualcosa si puo' fare.
Ma non tanto perche' l'if sia un diavolo, ma piu' che altro tenendo un occhio sulla usabilita' e la user-experience.

Mi spiego, se l'utente non scrive la user o la passord, nel branch else del tuo if molto probabilmente solleversti un'eccezione, che alla fine scriverebbe a schermo qualcosa tipo "hai premuto ok senza scrivere sia user che passord".

Ma brutto deficiente di un programma, perche' mi hai permesso di cliccare su OK se sapevi gia' che avresti sollevato un eccezione nel caso in cui io non avessi scritto sia user che password?

Ti proporrei quindi di intercettare il keypressed sulla editbox sia dello user che della password, nel cui corpo venga valutata la lunghezza della stringa (finora) immessa. Se entrambe le lunghezze sono diverse da zero, allora abiliti il pulsante OK, che altrimenti resta disabilitato.
In questo modo "potresti" evitare il controllo con l'if, in quanto saresti sicuro che se qualcuno ha premuto OK significa che necessariamente c'e' qualcosa nei 2 campi.
Ma non bisogna partire comuqnue cadere in errore. Per ragioni di copertura e di robustezza occorre mettere comunque un controllo.
Ma al posto dell'IF a questo punto puoi valutare l'uso di un "Assert", che e' un check piu' profondo e bloccante. D'altronde se qualcuno riuscisse a cliccare OK nonostante quanto controllato significherebbe che ci sarebbe un errore piu' grave che non una semplice dimenticanza utente.
__________________
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 13-10-2008, 11:28   #3
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Ciao.
Innanzitutto io spezzerei una lancia pro-if, nel senso che non e' detto che un programma senza if sia sempre migliore o piu' leggibile di uno con qualche if nel posto giusto.
Ma qui in effetti qualcosa si puo' fare.
Ma non tanto perche' l'if sia un diavolo, ma piu' che altro tenendo un occhio sulla usabilita' e la user-experience.

Mi spiego, se l'utente non scrive la user o la passord, nel branch else del tuo if molto probabilmente solleversti un'eccezione, che alla fine scriverebbe a schermo qualcosa tipo "hai premuto ok senza scrivere sia user che passord".

Ma brutto deficiente di un programma, perche' mi hai permesso di cliccare su OK se sapevi gia' che avresti sollevato un eccezione nel caso in cui io non avessi scritto sia user che password?

Ti proporrei quindi di intercettare il keypressed sulla editbox sia dello user che della password, nel cui corpo venga valutata la lunghezza della stringa (finora) immessa. Se entrambe le lunghezze sono diverse da zero, allora abiliti il pulsante OK, che altrimenti resta disabilitato.
In questo modo "potresti" evitare il controllo con l'if, in quanto saresti sicuro che se qualcuno ha premuto OK significa che necessariamente c'e' qualcosa nei 2 campi.
Ma non bisogna partire comuqnue cadere in errore. Per ragioni di copertura e di robustezza occorre mettere comunque un controllo.
Ma al posto dell'IF a questo punto puoi valutare l'uso di un "Assert", che e' un check piu' profondo e bloccante. D'altronde se qualcuno riuscisse a cliccare OK nonostante quanto controllato significherebbe che ci sarebbe un errore piu' grave che non una semplice dimenticanza utente.
Nel caso di un applicativo web la cosa si fa più complicata, visto che non puoi impedire che qualcuno ti mandi i dati "a mano" e l'Assert è inutilizzabile.
L'unica cosa è applicare un controllo lato server.

Per evitare l'if si può pensare ad un Dictionary qualcosa tipo:
Codice:
delegate void Validate(string message);
Dictionary<bool,Validate> validator = new Dictionary<bool, Validate>();

validator[false] = delegate (string message) { throw new Exception(message);};
validator[true] = delegate(string message) {};

validator[txtUsername.Text.Length == 0]("Username invalido");
validator[txtPassword.Text.Length == 0]("Password non valida");

validator[IsUsernameInDB(txtUsername.Text)]("Username invalido");
validator[IsValidLogin(txtUsername.Text,txtPassword.Text)]("Login non valida");
Il codice perde chiarezza in quanto va letto al contrario.
In caso di applicativi web magari è buona norma non dare indicazioni su cosa è effettivamente sbagliato meglio un generico "Login non valida".
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 11:30   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Nel caso di un applicativo web la cosa si fa più complicata, visto che non puoi impedire che qualcuno ti mandi i dati "a mano" e l'Assert è inutilizzabile.
L'unica cosa è applicare un controllo lato server.
Non avevo visto che era web. Chiedo scusa.
Comunque con tecnologie come AJAX.net si potrebbe fare, anche se non lo farei per questioni di performance.

Quote:
Il codice perde chiarezza in quanto va letto al contrario.
In caso di applicativi web magari è buona norma non dare indicazioni su cosa è effettivamente sbagliato meglio un generico "Login non valida".
Concordo.
__________________
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 13-10-2008, 11:43   #5
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Non avevo visto che era web. Chiedo scusa.
Non l'ha scritto però è una eventualità da considerare.

Quote:
Comunque con tecnologie come AJAX.net si potrebbe fare, anche se non lo farei per questioni di performance.
Si lo puoi fare (secondo me sarebbe una inutile complicazione), ma non puoi comunque evitare che ti vengano inviati i dati da un bot.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 11:55   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
L'applicazione non è web.

Già impazzisco con le 'bazzecole' lato client... figuramoci

@gugoXX:

Mi faresti un esempio con Assert ?

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 13-10-2008, 12:00   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
L'applicazione non è web.

Già impazzisco con le 'bazzecole' lato client... figuramoci

@gugoXX:

Mi faresti un esempio con Assert ?

Grazie mille

RaouL.
Ma gli Assert non servivano solo per il Debug?
Se compili in modalità Release spariscono.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 12:07   #8
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Eh non lo so

Generalmente uso un ErrorProvider per evitare valanghe di messagebox.

ma non vedo come evitare degli if.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 13-10-2008, 19:48   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ciao a tutti

Anche io nel mio piccolo cerco di aderire alla campagna anti-if

La mia piccola e semplice situazione è questa:

Un form di login, due caselle di testo per username e password e
i due classici bottoni di login e annulla.

Ora, il primo controllo che devo fare quando si clicca sul 'login' è che i due textbox non siano vuoti e quindi, mi piacerebbe trasformare questo:

Codice:
if(txtUsername.Text.Length != 0 && txtPassword.Text.Length != 0)
{
   //blablacode
}
Prima di andare avanti, mi piacerebbe sapere da voi come far funzionare questa semplice cosa senza l'ausilio degli if.

N.B.: La mia domanda non ha scopi di efficienza o altro

Grazie mille.

RaouL.
usi Windows Forms? Validation Events. in risposta all'evento validating scrivi una cosa del genere:
Codice:
e.Cancel = (txtUsername.Text.Length == 0);

Ultima modifica di 71104 : 13-10-2008 alle 19:50.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2008, 08:08   #10
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da 71104 Guarda i messaggi
usi Windows Forms? Validation Events. in risposta all'evento validating scrivi una cosa del genere:
Codice:
e.Cancel = (txtUsername.Text.Length == 0);
Si, uso windows forms

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 14-10-2008, 08:28   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
In effetti... sul validating funziona tutto correttamente.

La domanda che però mi sorge spontanea è:

In un form dove ci sono diverse decine di caselle di testo, è corretto utilizzare questo evento per ogni singola casella?

Grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Boom clamoroso per questo piccolo produt...
Amazon Luna saluta gli store di terze pa...
Windows Update non sarà più un incubo: M...
Stampante HP con Wi-Fi e 3 mesi di inchi...
Metro 2039 potrebbe essere il nuovo capi...
Call of Duty: Modern Warfare 4 l'uscita ...
Mega risparmi su Amazon Haul fino a mezz...
Il Blu-ray è davvero morto? Due a...
OpenAI punta sulla pubblicità in ...
Gmail, arriva la crittografia end-to-end...
Molotov contro la casa di Altman: il CEO...
Tesla ottiene l'approvazione del sistema...
Monopattini elettrici: il MIT rassicura ...
Roborock Saros 20 va subito in offerta: ...
Epic Games lavora ad un gioco sparatutto...
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:01.


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