|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
www.hwupgrade.it
Iscritto dal: Jul 2001
Messaggi: 75173
|
Link alla notizia: https://www.hwupgrade.it/news/web/se...ro_136113.html
Il WSJ ha raccontato le disavventure di alcune persone che di cognome fanno "Null". In informatica, infatti, "null" è usato per indicare un valore nullo o inesistente, e questo in alcuni casi può comportare grandi problemi. Click sul link per visualizzare la notizia. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 1701
|
Mi fa venire in mente una striscia di XKCD anche se il contesto e' differente:
![]()
__________________
Sidewinder |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2012
Messaggi: 5488
|
negli anni si è letto di tanta gente che ha cambiato il cognome per motivi abbastanza ovvi, ma pensare che uno possa avere un problema per un nome , tutto sommato , semplice , ma letteralmente in "contrasto" con le tecnologie moderne non lo avrei mai immaginato, anche perché non pensavo esistesse "Null" come cognome.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2007
Città: Sicilia
Messaggi: 6190
|
Personalmente ho sempre reputato l'esistenza di valori di tipo nullable in SQL una ca@ata pazzesca... Si, ok, se non memorizzi il dato risparmi qualche byte, ma tutti i casini che ci saremmo evitati se semplicemente non fosse stato possibile mettere un valore a NULL valeva decisamente il sacrificio... In nessuno dei database progettati da me e' possibile mettere dei valori a NULL, e quando scrivo codice evito di mettere qualsiasivoglia tipo di puntatore a nullptr, per non parlare di puntatori non inizializzati (anche se in quel caso i warning vengono in mio soccorso)... Da anni ci sono metodi migliori per capire se un puntatore contiene un valore valido, come evitare il puntatore a prescindere ed utilizzare qualcosa come std::optional o std::expect... Non per fare lo sborone, ma non credo sia un caso se i processi che faccio in C++ per i clienti sono gli unici, fra tanti fornitori, che possono stare su anche per centinaia di giorni senza crash e senza memory leak...
__________________
Non abbiamo ereditato il mondo dai nostri padri L'abbiamo preso in prestito dai nostri figli |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2002
Messaggi: 1082
|
@jepessen onestamente non ho capito, a me sembra esattamente il contrario di quel che stai dicendo ma magari ho interpretato male. Io lavoro su SQL Oracle, i valori nullabili esistono e una stringa 'NULL' non può essere equiparata al valore NULL, sono due cose diverse e meno male altrimenti si ricasca nei casi indicati.
Per quanto sia assurda la stringa che usi hai sempre il rischio che ci sia un valore che corrisponda e non sia un NULL, a meno che non usi la stringa "X Æ A-12" ... a no! nemmeno quella ![]() Il problema sta proprio lì, nella mancata gestione dei valori nullabili. Se il campo è mandatory sei costretto a "simulare" i NULL con delle stringhe strane, poi ti ritrovi in questi casi. Perché i NULL propriamente detti esistono non puoi far finta di no. Magari non il cognome (e sarebbe da verificare, magari da qualche parte nel mondo si usano solo i nomi) ma ci sono infinità di altri casi in cui il campo può essere vuoto. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jul 2007
Città: Sicilia
Messaggi: 6190
|
Quote:
Ad esempio tutte le multe arrivate a chi ha la targa 'null' sono quelle per cui per qualsiasi motivo, errore della polizia o altro, non sono associate ad una targa specifica, quindi la targa non viene memorizzata nel database. Se fai una query devi comunque avere una targa da memorizzare e ottieni 'null', a questo punto vedi quale macchina ha quella targa, ed ottieni il casino. Campi che possono essere vuoti per me sono un code smell, se proprio non puoi farne a meno puoi utilizzare un valore di default che comunque NON e' ammesso fra quelli validi, ad esempio per una targa potrebbe essere qualcosa come "@NULL@" o "NOT DEFINED" dato che i caratteri speciali non sono ammessi nelle targhe, e che hanno una lunghezza definita, oppure -1 se e' un valore numerico positivo. Ma avere una stringa che ti rappresenta un valore nullo, con un contenuto che puo' effettivamente essere valido e' un errore di design a mio avviso.
__________________
Non abbiamo ereditato il mondo dai nostri padri L'abbiamo preso in prestito dai nostri figli Ultima modifica di jepessen : 26-02-2025 alle 11:13. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 1516
|
Quote:
In quanto al definire un valore non ammesso tra quelli validi, il problema è proprio che i valori che hai scritto sono possibili, per cui la tua soluzione fa c@g@re. Incidentalmente, il valore NULL e la stringa 'NULL' sono valori diversi. Se vuoi che una colonna non contenga campi NULL, è sufficiente dichiararlo NOT NULL nella creazione della tabella. Insomma, non hai mai visto un database in vita tua e non sai i problemi sottostanti. Ti consiglio di trovare un testo di base su SQL e studiare la normalizzazione di Codd. Prima di parlare a vanvera di certi argomenti non sarebbe male studiarli.
__________________
-- C --_____AlPaBo __/____x\_________ _/_______*________ |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jan 2008
Messaggi: 304
|
Mah
Mah... ora ci sono linguaggi dove si può specificare se una variabile può essere null o non-nullable. Poi ci si scontra con i valori di default... se NULL fosse stata una brutta cosa nei nuovi linguaggi il NULL non esisterebbe mai (in Rust per esempio non c'è il null ma un None ma la variabile a quel punto non è di tipo T ma Option<T>).
Bisogna solo gestirli ed è time-consuming. Poi non parliamo di oracle, che ok che "Null" non è NULL, ma "" (stringa vuota) per oracle è NULL. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2012
Messaggi: 5488
|
A giudicare come si sta evolvendo la discussione si conferma che:
"Se il tuo cognome è 'Null' rischi che il mondo digitale ti si rivolti contro " a pensare che io mi son fermato ai tempi agli inizi di C++ e qualche piccola programmazione ancora prima sul C64 ![]() |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Feb 2003
Città: BG
Messaggi: 10026
|
Quote:
![]() se chi scrive il codice (che sia C++, python, C#, SQL o altro) non sa gestire un NULL è un problema di competenza, non del "dato in se".
__________________
Mac mini M1,16GB,2TB,10Gbit;Satechi Hub NVMe;Samsung 990 Pro 4TB;WD My Passport for Mac 4TB / Logitech MX Keys;Logitech MX Vertical;Philips 288E2A;PreSonus Eris E3.5;HP LaserJet Pro M281fdw / QNAP TVS-871-i3-4G,8GB,8x WD Red CMR 6TB raid 6,QNAP QXG-2G1T-I225 / TP-LINK Archer GE800;QNAP QSW-1105-5T / iPhone 14 Pro Max 1TB;iPad mini 6 256GB;Apple Watch Ultra 2;AirPods Pro 2;Kindle Paperwhite 11 SE / LG OLED C2 48";Apple TV 4K 2021 64GB;Denon AVR-X2800H / Xbox Series X;Seagate Expansion Card 2TB |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2007
Città: Casnate con Bernate
Messaggi: 2083
|
Ma che problemi vi creano i null ?
Ok per alcuni dati il valore di default anzichè il null ci può stare. Io lo uso sempre per i numeri. Tra Avere null o zero preferisco sicuramente trovarmi zero. Ma per le date come fate senza null? mettete 01.01.0001 ? o 01.01.1900 ? Ci sono tanti casi in cui un data deve semplicemente essere null perchè il valore non è applicabile e da più fastidio che altro. Idem per le stringhe. Ed anche in molti contesti di calcolo scientifico è preferibile avere null anzichè zero nel DB.
__________________
PSU: Seasonic M12II-620 Evo MB: MSI X370 Sli Plus CPU: AMD Ryzen 7 5700X SSD: Kingston SA400S37/240GB RAM: 2x 16GB DDR4 3200MHz SCHEDA VIDEO: SAPPHIRE RX 6700 Pulse OC 10GB S.O.: bazzite.gg |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2008
Messaggi: 10331
|
Quote:
L'unico vero problema è quella $robaFetidaMarroneSecca chiamata COBOL che non ha il concetto di NULL/NIL/OPTION come i linguaggi che non risalgono all'allunaggio ![]() Con COBOL tutto deve essere valorizzato, quindi nel tempo è stato anche scritto codice con placeholder che avessero il significato di null (invece di usare flag che indicassero un campo come null). Usare DB relazionali o non nel 2025 senza usare nullable fields è da pensionamento anticipato o calcione nel di dietro.
__________________
Le mie 80+ Trattative del Mercatino Vendo: Case Koolink midtower con pannelli fonoassorbenti Ultima modifica di WarSide : 26-02-2025 alle 17:52. |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2008
Messaggi: 10331
|
Quote:
__________________
Le mie 80+ Trattative del Mercatino Vendo: Case Koolink midtower con pannelli fonoassorbenti |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12814
|
Il problema è che internet si basa su linguaggi mediocri tipo Javascript dove si possono fare le peggiori porcate senza ritegno.
Solo un sistema progettato male può scambiare la stringa "null" con il *valore* NULL. ![]() |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jun 2012
Messaggi: 5488
|
Quote:
Dopp quella volta, quando parlavo con i pochi che al tempo come me piaceva stare su PC, gli citavo il Cobol e questi mi guardavano stralunati. |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: May 2008
Messaggi: 2065
|
Meno male che qualcuno qui ha tirato fuori il Cobol (che non conosco).
Perché stavo facendo oggettivamente molta fatica a capire come un sistema/software potesse trovarsi in difficoltá con una stringa "Null" come se ci fosse una qualche chance di confonderla con il valore NULL. Mai avuto questo problema, né in Java, né C++, né C#, ne Python, né Javascript, né SQL, né PHP etc etc --Il problema è che internet si basa su linguaggi mediocri tipo Javascript dove si possono fare le peggiori porcate senza ritegno. Concordo. Javascript dovrebbe essere un linguaggio da ricerca/sperimentazione, non uno dei pilastri della moderna civiltá tecnologica. |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jun 2007
Città: Casnate con Bernate
Messaggi: 2083
|
Quote:
Tutta roba morta su cui gira probabilmente metà delle transazioni bancarie mondiali.
__________________
PSU: Seasonic M12II-620 Evo MB: MSI X370 Sli Plus CPU: AMD Ryzen 7 5700X SSD: Kingston SA400S37/240GB RAM: 2x 16GB DDR4 3200MHz SCHEDA VIDEO: SAPPHIRE RX 6700 Pulse OC 10GB S.O.: bazzite.gg |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Jun 2012
Messaggi: 5488
|
Quote:
Ho tirato fuori sto discorso perché quando me ne parlò quel signore, sembrava di parlare di qualcosa di giurassico, senza sapere che era effettivamente un qualcosa di molto vecchio per già fine anni 90. Poi beh, è un'inezia, ma COBOL è difficile da dimenticare come nome. |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 1516
|
Quote:
Se per esempio devi fare una media dei valori presenti, lo 0 fa media, mentre NULL viene escluso. Per cui, AVG(2,4,0) --> 2 mentre AVG(2,4,NULL) --> 3
__________________
-- C --_____AlPaBo __/____x\_________ _/_______*________ |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jun 2007
Città: Casnate con Bernate
Messaggi: 2083
|
Ecco questo è un buon esempio del perchè usare null ha senso in diversi casi.
Nelle medie che ho fatto fino ad ora lo zero doveva essere considerato quindi era ok. Ma come dici tu l'esempio è calzante.
__________________
PSU: Seasonic M12II-620 Evo MB: MSI X370 Sli Plus CPU: AMD Ryzen 7 5700X SSD: Kingston SA400S37/240GB RAM: 2x 16GB DDR4 3200MHz SCHEDA VIDEO: SAPPHIRE RX 6700 Pulse OC 10GB S.O.: bazzite.gg |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:07.