Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
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


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
Carburanti, dopo Eni anche IP annuncia u...
HEO Space ha rilasciato una nuova immagi...
La missione Artemis III sarebbe in ritar...
Apple apre Music Hall, una sala concerto...
Adobe arriva su Gemini e Claude: nuove f...
Non solo Fideuram: quasi 2 milioni di it...
I lettori CD di fascia alta potrebbero s...
Tutto il meglio di Amazon weekend: 5 nov...
Proscenic P15+ a 113€ su Amazon: scopa e...
TP-Link Wi-Fi 6 a 59,99€ e Tenda 4G03 Pr...
Un quasi top di gamma a 461€: lo smartph...
Roborock Saros 20 Neo e Flow Complete: 3...
Mac mini si trasforma: chip a 2 nanometr...
Su Amazon c'è un super TV Samsung...
La Cina ha rilasciato un satellite dallo...
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: 00:05.


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