Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-06-2013, 11:14   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Scrittura codice in modo elegante

c'è qualcosa di più elegante di questo???
Codice:
			calendarId = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID) == null ? "all" : request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID);
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:22   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Se non è un problema usare variabili locali per aumentare la leggibilità allora io di solito preferisco fare così:
Codice:
id = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID);
calendarId = (id != null) ? id : "all";
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 26-06-2013 alle 11:24.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:29   #3
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Concordo con banryu79. Altrimenti se hai molte istruzioni di quel tipo puoi crearti un metodo statico...

Per curiosità, in C# c'è questo:
Codice:
calendarId = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID) ?? "all";
http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

Bellissimo secondo me, anche se spesso lavorando con stringhe finisco per non usarlo perché devo verificare anche che la stringa non sia vuota.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:36   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Per curiosità, in C# c'è questo:
Codice:
calendarId = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID) ?? "all";
Bellissimo secondo me, anche se spesso lavorando con stringhe finisco per non usarlo perché devo verificare anche che la stringa non sia vuota.
In Java il cosidetto "Elvis operator" non c'è, ma la fortuna maggiore nell'usare Java come piattaforma è che la fuori ci sono un fottìo di linguaggi che compilano bytecode, ad esempio Kotlin e lui l'Elvis operator ce l'ha, oltre ad avere altri costrutti carini per assicurare la Null-safety.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:46   #5
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Se non è un problema usare variabili locali per aumentare la leggibilità allora io di solito preferisco fare così:
Codice:
id = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID);
calendarId = (id != null) ? id : "all";
non è un problema, ma la mia non è una necessità lessicale, ma una semplice curiosità
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Concordo con banryu79. Altrimenti se hai molte istruzioni di quel tipo puoi crearti un metodo statico...

Per curiosità, in C# c'è questo:
Codice:
calendarId = request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID) ?? "all";
http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

Bellissimo secondo me, anche se spesso lavorando con stringhe finisco per non usarlo perché devo verificare anche che la stringa non sia vuota.
ecco, cercavo qualcosa di simile in java, che intuisco non ci sia.
anche io mi trovo con controllare stringhe non vuote o non nulle...il classico metodo nelle librerie di progetto "stringEmpity"
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:47   #6
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Dai un occhiata alla libreria guava di Google. C'è una classe che si chiama Optional che modella quello che vuoi fare. Crei un oggetto così:
Codice:
Optional<String> id = Optional.of(request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID));
Quando devi leggere il valore:
Codice:
id.or("all");
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:57   #7
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Dai un occhiata alla libreria guava di Google. C'è una classe che si chiama Optional che modella quello che vuoi fare. Crei un oggetto così:
Codice:
Optional<String> id = Optional.of(request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID));
Quando devi leggere il valore:
Codice:
id.or("all");
interessante.

Comunque mi sembra di capire che "l'elvis operator" è stato implementato da java 1.7, quindi è utilizzabile in modo diretto
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 11:58   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Oppure si scrive lui una classe utility (oltre ad essere effettivamente utile, è anche un buon esercizio):
Codice:
...
public class Option<T> {
    
    public static <T> Option<T> of(T arg) {
        return new Option<>(arg);
    }

    private final T value;    
    
    public Option(T value) {
        this.value = value;
    }

    public boolean isEmpty() {
        return value == null;
    }

    public boolean isDefined() {
        return value != null;
    }

    public T getOr(T alt) {
        return isEmpty() ? alt : value;
    }

    public T get() {
        return value;
    }
    
    public boolean hasValue(T value) {
        return isDefined() && get().equals(value);
    }

    @Override public String toString() {
        return String.format("Option[%s]", get());
    }
}
E quindi (come Vicius):
Codice:
Option<String> id = Option.of(request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID));
calendarId = id.getOr("all");
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 26-06-2013 alle 12:13.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 12:05   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da franksisca Guarda i messaggi
Comunque mi sembra di capire che "l'elvis operator" è stato implementato da java 1.7, quindi è utilizzabile in modo diretto
Come scusa?
Language Enhancements in Java 7
Direi di no
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 12:20   #10
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Oppure si scrive lui una classe utility (oltre ad essere effettivamente utile, è anche un buon esercizio):
Codice:
...
public class Option<T> {
    
    public static <T> Option<T> of(T arg) {
        return new Option<>(arg);
    }

    private final T value;    
    
    public Option(T value) {
        this.value = value;
    }

    public boolean isEmpty() {
        return value == null;
    }

    public boolean isDefined() {
        return value != null;
    }

    public T getOr(T alt) {
        return isEmpty() ? alt : value;
    }

    public T get() {
        return value;
    }
    
    public boolean hasValue(T value) {
        return isDefined() && get().equals(value);
    }

    @Override public String toString() {
        return String.format("Option[%s]", get());
    }
}
E quindi (come Vicius):
Codice:
Option<String> id = Option.of(request.getParameter(SoggettiConstant.SUBJECT_CALENDAR_ID));
calendarId = id.getOr("all");
non ho "bisogno" dell'esercizio

anche perchè già faccio qualcosa di simile..
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Come scusa?
Language Enhancements in Java 7
Direi di no
leggendo in giro sembrava di si, forse è qualche openpoint sulla jdk che avevano proposto e poi non implementato, magari lo implementeranno in java8 o magari no

grazie ancora
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 13:05   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da franksisca Guarda i messaggi
non ho "bisogno" dell'esercizio
Tutti ne abbiamo bisogno, e sempre
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 14:20   #12
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Tutti ne abbiamo bisogno, e sempre
si, come tutti abbiamo bisogno di 48 ore al giorno

purtroppo sai meglio di me che i tempi lavorativi impediscono (con una cattiva progettazione e/o una cattiva analisi) di scrivere il codice come vorremmo. su un altro progetto ho potuto scrivermi un bella libreria personale che faceva qualcosa del genere, ma qui non ho potuta usarla per limiti applicativi
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2013, 15:24   #13
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da franksisca Guarda i messaggi
leggendo in giro sembrava di si, forse è qualche openpoint sulla jdk che avevano proposto e poi non implementato, magari lo implementeranno in java8 o magari no

grazie ancora
Si erano stati proposti due nuovi operatori ?: e ?. ma sono stati rifiutati. Per quanto riguarda java non credo li vedremo mai. Se vuoi giocarci c'è sempre groovy che li ha implementati.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2013, 18:24   #14
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5742
L'eleganza secondo me passa anche attraverso l'uso delle parentesi.
Personalmente trovo che la leggibilità sia molto migliore aprendo le graffe a capo in una nuova linea. Questo permette di identificare immediatamente i metodi, i blocchi e i cicli, sfruttando anche l'indentazione del codice, senza dover andare a caccia delle parentesi.

Mi piace anche rendere meno sintetico il codice esplicitando il più possibile per far assumere un significato univoco.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Cos'è RSL, il nuovo standard che ...
Nissan Micra EV: da 29.500 a oltre 36.00...
Processo Microsoft-ValueLicensing: cosa ...
L'edizione limitata più ambita da...
Lo sviluppatore di MSI Afterburner svela...
Quando l'AI diventa maestro: così...
Sony WH-1000XM6 già scontate su A...
NVIDIA chiede più velocità...
Windows 11 in soli 2,8 GB: con questo sc...
Panico in casa HYTE: ritirato dal mercat...
OPPO Reno14, debutto tra rooftoop esclus...
3DAIQ, il progetto di Concept Reply e TE...
Il parlamento francese contro TikTok: '&...
Apple Watch SE 2ª gen. Cellular a soli 2...
MotoE sospesa dopo il 2025: fine tempora...
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: 23:44.


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