|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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
}
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
|
|
|
|
|
|
#2 |
|
Senior Member
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. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
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");
In caso di applicativi web magari è buona norma non dare indicazioni su cosa è effettivamente sbagliato meglio un generico "Login non valida". |
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Comunque con tecnologie come AJAX.net si potrebbe fare, anche se non lo farei per questioni di performance. Quote:
__________________
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. |
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Non l'ha scritto però è una eventualità da considerare.
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
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
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#8 |
|
Senior Member
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
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
e.Cancel = (txtUsername.Text.Length == 0); Ultima modifica di 71104 : 13-10-2008 alle 19:50. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
grazie mille RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
|
#11 |
|
Senior Member
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
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:47.




















