--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/1125100230.9270772.1725982344029%40mail.yahoo.com.
Ciao Luca
Sono due cose diverse, Optional è assenza di valore, la nullability è assenza di reference.
Sintatticamente sono diversi, ma nella mia testa hanno la stessa semantica, questo a prescindere se sia l'argomento o il valore risultante della funzione.
Se "null" e "Optional.EMPTY" avessero due significati diversi, una funzione di tipo Optional potrebbe restituire null, ma questa è considerata una cattiva pratica.
Vasco
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/d2170150-0e29-4d6a-8124-56846b702b25%40yahoo.it.
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/2023048906.11716913.1726294128603%40mail.yahoo.com.

--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/2023048906.11716913.1726294128603%40mail.yahoo.com.
Analogamente tornando all’informatica se sostituiamo i tipi al posto di degli insiemi, una funzione fun f(num: Int): String trasforma dati dal dominio delle stringhe al codominio degli interi.
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/CEF5E093-8934-4A2F-8F5F-707DBF7BEB26%40gmail.com.
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/1759711938.11906325.1726329693501%40mail.yahoo.com.
Typescript che è stato scritto da zero ha un accento forte sul Type System
con scelte più o meno plausibili ma anche lì, dove il type system è molto interessante, ci sono dei momenti un pò strani: undefined, null, unknown, any e le alberature derivanti...
null non è tipo ma indica l’assenza di un tipo e purtroppo può essere sostituito a qualsiasi tipo, pertanto non fa parte dell’insieme dei tipi di ritorno (ovvero del codominio) anche se può essere ritornato.
Penso che la differenza principale tra i nostri due punti di vista sia proprio questa, provo a spiegarti come la vedo io.
In Java, è "void" a non essere un tipo, un non qualcosa che fa praticamente solo eccezioni: solo i risultati dei metodi possono essere void, non puoi tornare void ("return void" oppure "return println()"), puoi anche non chiamare il return del tutto.
null in Java è una costante, un valore perfettamente legittimo per qualsiasi riferimento pur non estendendo Object.
A mio avviso, il problema principale è che Java ha una dichiarazione fuorviante, perché quello che in Java si scrive:
String f(int num)
In Ceylon si scrive:
String|Null f(Int num)
Sono esattamente la stessa dichiarazione, ma in Ceylon è evidente che "null" fa parte del codominio.
In Java questa cosa sarà possibile quando completeranno il JEP che ho citato all'inizio della discussione.
Se quanto scritto sopra è corretto, questo implica che quello che in Java è:
Optional<String> f(int num)
In Ceylon è:
Optional<String>|Null f(Int num)
Ne consegue che a il problema del null hai aggiunto Optional.
Dico questo ignorando le buone pratiche, suppongo che il tuo discorso verta sui linguaggi e la semantica della dichiarazione è quella.
La monade Optional ad esempio trasforma una funzione parziale in una completa
Questo è vero solo se la funzione non può tornare null, non può lanciare eccezioni e non può arrestare il programma, non mi sembra il caso di Java.
Questo ci obbliga a scrivere if (result == null) { … } else { … }Queste sono differenze sintattiche su cui avrei altro da dire (e l'ho già detto in un talk al JUG), però la mia domanda riguarda le differenze semantiche.
E’ la stessa idea che dei null objects in OOP ma le monadi hanno un vantaggio enorme: sono componibili come le funzioni e come esse mantengono le proprietà matematiche della composizione.
Qual'è il significato di null diverso da quello di Optional.EMPTY?
Vi aggiungo un rebus, se vi va: nell'interfaccia java.util.Map<K, V>, quale dovrebbe essere la firma del metodo "get"?
Optional<String>|Null f(Int num)


--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/61544790.12036141.1726395002355%40mail.yahoo.com.
On 15 Sep 2024, at 12:10, 'Francesco Vasco' via JUGMilano - JVM User Group Milano <jugm...@googlegroups.com> wrote:
Ciao Gian Carlo,ti ringrazio ancora per la discussione, ne sto approfittando per rinfrescarmi un po' di concetti.Mi spiace per gli esempi in Cyelon, provo ad usare la matematica.
<1726392925842blob.jpg>
<1726394127223blob.jpg>
Se comprendo bene, la dichiarazione di una variabile di tipo T, equivale a: T ∪ {null}Faccio notare che questo non è sempre vero, se scrivo: catch (e: A | B | C), la variabile "e" può essere solo dei tipi enumerati, mai null.
Francesco
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/61544790.12036141.1726395002355%40mail.yahoo.com.
<1726392925842blob.jpg><1726394127223blob.jpg>
--
jugmilano.it - youtube.com/c/JUGMilano - twitter.com/JUGMilano - gitter.im/jugmilano/jugmilano
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "JUGMilano - JVM User Group Milano" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a jugmilano+...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/jugmilano/451979390.12632460.1726484468759%40mail.yahoo.com.
Ciò che ci fornisce Java ovvero l’insieme di literal null più un tipo anonimo che non posso istanziare possono essere considerati un tipo a tutti gli effetti?Si.
Perdonami ma qui ti perdo inesorabilmente.
Nel mio limitato cervello, se la specifica dichiara che esiste, allora esiste, indipendentemente dal fatto che sia anonimo, che sia un letterale, da quale si supponga sia l'intenzione dell'implementazione JVM oppure se voglia o meno essere trattato come tipo.
non fornisce nessun significato semantico dato che è anonimoSono 29 anni che null è usato in Java, è il valore predefinito per qualsiasi riferimento, uno schifo di semantica dovrà pure averla :-)
Comunque forse ho capito le divergenze, nessun problema.
Se decidi di fare un talk su questo argomento, io ci sono!
E sono 29 anni che si dice in giro non sia stata l’idea più riuscita del linguaggio dato che ognuno gli dà il significato che vuole e tutti fanno if (pippo==nuill) per i più disparati motivi:) (ricordiamoci sempre di quest’uomo https://en.wikipedia.org/wiki/Tony_Hoare)