www.wikidata.de-de.nina.az
Dieser Artikel behandelt den Begriff des Nullwerts aus der EDV zu weiteren Bedeutungen von Null siehe 0 Als Nullwert kurz NULL NIL oder bezeichnet man in der Informatik einen Zustand der das Fehlen eines Wertes anzeigen soll Nach Edgar F Codd unterscheidet man zwei Arten von NULL einerseits die Nicht Existenz einer Eigenschaft property inapplicable z B Geschmack einer Strecke und andererseits das Fehlen des Wertes einer existierenden Eigenschaft value at present unknown z B Lange einer noch nicht gemessenen Strecke 1 Ein Nullwert steht zwar fur die Abwesenheit eines Wertes ist aber selbst ein Wert der gespeichert gelesen und verglichen werden kann Der Nullwert ist verschieden von der Zahl 0 da diese einen gegebene Quantitat reprasentiert Sprachlich wird gelegentlich der Nullwert von der algebraischen Zahl 0 durch die Aussprache unterschieden indem wie im Englischen nʌl gesprochen wird um Missverstandnisse zu vermeiden Inhaltsverzeichnis 1 Beispiel 1 2 Beispiel 2 3 Darstellung im Computer 3 1 Gleichsetzung vereinbarter gultiger Werte mit Undefiniertheit 3 2 Nullwert als grundverschiedener Wert 4 NULL in SQL Datenbanken 4 1 Einordnung und Behandlung entsprechend der Datenbanklogik 4 2 Not Null 5 Verschiedene Reprasentationen des Nullwertes 5 1 NIL 5 2 None 5 3 Nothing 5 4 null NULL nullptr 5 5 NaN 5 6 Sentinel oder Wachterwert 6 Abgrenzung 6 1 Nullzeichen 6 2 Nullgerat 7 Siehe auch 8 EinzelnachweiseBeispiel 1 BearbeitenFolgendes Beispiel verdeutlicht die Bedeutung von NULL in Datenbanken und Programmen In einer Datentabelle sollen Arzte je eine Diagnose pro Patient eintragen nachdem sie diesen untersucht haben Was bedeutet es nun wenn in dieser Tabelle zu einem Patienten keine Diagnose eingetragen ist Ist er gesund oder einfach noch nicht untersucht In Papierlisten ist es deshalb ublich leere Felder durchzustreichen um zu verdeutlichen dass das Feld bewusst bearbeitet wurde und es tatsachlich leer sein soll In Datenbanken haben Felder die noch nicht bearbeitet wurden oder die aus anderen Grunden keinen Wert enthalten den Wert NULL Sobald man gezielt einen Wert eintragt verschwindet NULL und der eingetragene Wert der auch leer keine Diagnose also gesund sein kann wird gespeichert Beispiel 2 BearbeitenMan denke sich in einer Datenbank oder einer langen Liste sollen die Telefonnummern von Studenten gespeichert werden Man definiert also dass eine Spalte der Tabelle nur Zahlen enthalten darf Trifft man nun auf einen Studenten der kein Telefon besitzt so wurde man anstelle der Telefonnummer in sein Telefonnummernfeld wahrscheinlich einen Strich das Zeichen n a oder ein Fragezeichen setzen All diese Zeichen sollen bedeuten Wert nicht bekannt oder nicht vorhanden Genau das erledigt bei elektronischer Speicherung der Nullwert Darstellung im Computer BearbeitenMochte man in einer Computerliste so einen Strich setzen braucht dieser Strich eine digitale Darstellungsform Es gibt hier zwei Herangehensweisen Gleichsetzung vereinbarter gultiger Werte mit Undefiniertheit Bearbeiten Hierbei erwahlt man einen formal gultigen Wert des Feldes willkurlich als Nullwert Welcher der Nullwert ist wird entweder aus dem Kontext ersichtlich oder muss explizit dokumentiert werden Sind in einer Tabelle Zitate von Aposteln angegeben so konnte man in die letzte Spalte Zahlenwerte von 1 bis 12 schreiben die angeben welcher der Apostel Jesu hier zitiert wird Ist es unbekannt konnte man nun den Wert 13 oder 1 eintragen und damit meinen dass nicht bekannt ist welcher es war oder ob es uberhaupt ein Junger Jesu war oder dass mit Sicherheit kein Junger Jesu zitiert wird Der Vorteil dieser Methode ist dass man dabei grundsatzlich Speicherplatz spart Der Nachteil ist dass ein ursprunglich als Nullwert definierter Wert in Konflikt mit einem tatsachlichen Wert kommen kann Denke man bei obiger Liste an einen Nullwert 13 so konnte es durchaus passieren dass eines Tages der Apostel Paulus zitiert und ihm die Zahl 13 zugewiesen wird die dann vielleicht ungewollt und unbemerkt mit einem Zitat Goethes im Konflikt stunde Dieses Problem ist in der Vergangenheit wiederholt aufgetreten unter anderem als Jahr 2000 Problem Nullwert als grundverschiedener Wert Bearbeiten Um obiges Problem zu vermeiden kann man den Nullwert unmissverstandlich von den gultigen Werten trennen indem man ein besonderes Zeichen einfuhrt das in allen Kontexten immer nur ein Nullwert ist Eine technische Umsetzung bietet sich bei Programmiersprachen an die Variablen vom Typ Zeiger kennen also als Verweis auf den eigentlichen Wert Nun kann man eine bestimmte Stelle im Arbeitsspeicher bestimmen die als Nullwert und nur als Nullwert verstanden wird Unter den vielen Moglichkeiten einer Verabredung bietet sich die Verabredung auf Null deshalb in besonderer Weise an weil eine Dereferenzierung eines auf die Adresse 0 zeigenden Zeigers auf den meisten Betriebssystem Maschinen Kombinationen zum Crash fuhrt Enthalt die obige Tabellenspalte normalerweise nur Zeiger auf Telefonnummern dann liegt es nahe dem Nullzeiger die Bedeutung zu geben dass sich an dieser Stelle die leere Telefonnummer befindet In der Programmiersprache C existiert fur diesen Zweck der sogenannte Nullzeiger engl null pointer Im Programmtext kann eine Nullzeiger Konstante null pointer constant durch eine beliebige integer constant expression ein konstanter ganzzahliger Ausdruck der gewissen Bedingungen genugen muss mit Wert 0 optional mit einem Cast nach void versehen ausgedruckt werden ISO IEC 9899 1999 6 3 2 3 Abs 3 Die C Standard Bibliothek stellt ein Makro NULL zur Verfugung welches zu einem solchen Ausdruck expandiert 2 In C kann eine Nullzeiger Konstante keinen Cast nach void enthalten ISO IEC 14882 1998 4 10 Abs 1 dies gilt in C infolgedessen auch fur das Standard Makro NULL welches daher in C meist nur zum Integer Wert 0 expandiert Da dies zu anderen Problemen fuhrt so ist diese Konstante vom Typ a href Integer Datentyp html title Integer Datentyp int a und kein Zeigertyp wurde in C 11 ein neues Schlusselwort fur die Nullzeigerkonstante eingefuhrt nullptr Diese Konstante ist von einem eigenen Datentyp std nullptr t der in einen beliebigen Zeigertyp Daten Funktionszeiger nicht jedoch in einen Ganzzahlausdruck konvertiert werden kann In C ist null der Standardwert fur Referenz Typen wie Object String oder List Es ist daher bei der Verwendung dieser Typen von Wichtigkeit diese vor der Verwendung zu initialisieren beziehungsweise vor der Verwendung zu prufen ob die Variable derzeit den Wert null besitzt 3 Simple Typen wie int konnen hingegen nicht mit null belegt werden und mussen daher mit einem echten Wert wie 0 belegt werden Seit C 2 0 gibt es jedoch auch die Moglichkeit der Verwendung von sogenannten Nullable Typen die es erlauben auch simple Typen wie int oder a href Boolean html title Boolean bool a mit null zu belegen 4 Andere Programmiersprachen etwa Java stellen ein dediziertes Schlusselwort fur den Nullwert zur Verfugung In manchen dynamisch getypten Sprachen wie Smalltalk gibt es ein spezielles vordefiniertes Null Objekt das die Funktion eines kanonischen Nullwertes ubernimmt NULL in SQL Datenbanken BearbeitenEinordnung und Behandlung entsprechend der Datenbanklogik Bearbeiten Relationale Datenbanksysteme setzen eine dreiwertige Logik ein die in der Abfrage und Aktualisierungssprache SQL realisiert wird Dort gilt Unknown als dritter Wahrheitswert neben False und True Die ublichen logischen Verknupfungen Und Konjunktion und Oder Disjunktion werden angepasst indem man False 0 Tru e 1 und Unknown setzt Dann gilt zwischen zwei Wahrheitswerten a b a UND b min a b displaystyle a operatorname UND b min a b nbsp sowie a ODER b max a b displaystyle a operatorname ODER b max a b nbsp In SQL ist NULL kein Wert da die grundlegende Eigenschaft von Werten namlich sie mit anderen Werten des gleichen Datentyps vergleichen zu konnen nicht das gewunschte Ergebnis liefert Beispielsweise ergibt das Pradikat Spalte NULL immer unknown auch wenn ein Wert in der Spalte NULL ist Stattdessen mussen die Pradikate IS NULL und IS NOT NULL verwendet werden um einen Wert auf NULL zu testen Einerseits spricht man von der sogenannten Don t know Unbestimmtheit und meint damit die bereits beschriebene Unkenntnis des Wertes andererseits gibt es die sogenannte Don t Care Unbestimmtheit die in Datenbanken auftritt wenn ein Datensatz einen bestimmten Wert ganz einfach nicht benotigt Ein leicht einsehbares Beispiel ist der Fall einer Dokumentendatenbank in der eine Tabelle mit verschiedenen multimedialen Dokumenten verwaltet wird zum Beispiel Bucher und CDs Die Tabelle kann neben allgemeinen Angaben wie Name Thema Regalstandort auch medienspezifische Spalten wie ISBN oder Interpreten haben In diesem Fall hatten alle Eintrage uber CDs in der Spalte ISBN NULL als Wert da in der Regel nur Bucher eine ISBN haben Dementsprechend hatten die meisten Bucher Ausnahme Horbucher in der Spalte Interpret eine NULL stehen da Bucher eher von Autoren als von Interpreten erstellt werden Die gangige Lehrmeinung besagt jedoch dass das Auftreten von Don t care Unbestimmtheiten auf Fehler im Entwurf der Datenbank hinweist Kurzum sollte die Datenbank von vornherein so geplant sein und implementiert werden dass Don t care NULLen nie auftreten Christopher J Date und Hugh Darwen weisen im The Third Manifesto auf die Problematik von NULL in relationalen Datenbanksystemen hin und kritisieren dass der NULL Wert in selbigen nicht eindeutig ist da er entweder auf Unbekanntheit oder Nichtexistenz hinweisen kann Sie erlautern im Third Manifesto wie man eine relationale Datenbank ohne die Verwendung von NULL strukturieren kann indem man Werte die NULL enthalten konnen in eigene Beziehungstabellen normalisiert 5 Not Null Bearbeiten Das aus der Datenbanksprache SQL entlehnte Sprachkonstrukt not null engl fur auf jeden Fall ein Wert beschreibt die Anforderung dass NULL in einem ausgezeichneten Zusammenhang unzulassig ist In SQL ist NOT NULL ein sehr gebrauchlicher Constraint also eine Integritatsbedingung deren Einhaltung von der Software grundsatzlich erzwungen wird So wird in der Beschreibung von Bedienoberflachen durch den Hinweis not null darauf hingewiesen dass ein Datenfeld in der Ausgabe grundsatzlich befullt und oder beim Erfassen grundsatzlich nicht leer gelassen werden darf Im Regelfall wird die Bedeutung von nicht leer in letzterem Fall etwas grosszugiger ausgelegt dass in jedem Fall ein zulassiger Wert eingetragen werden muss was beispielsweise Leerzeichen Folgen ausschliessen kann Verschiedene Reprasentationen des Nullwertes BearbeitenNIL Bearbeiten Einige Programmiersprachen beispielsweise Pascal Lisp Smalltalk Ruby Objective C Lua Scala Go verwenden die Bezeichnung nil anstatt Null oder null Nil ist eine Kontraktion aus dem lateinischen nihil was nichts bedeutet In der englischen Sprache ist es ein Synonym fur null Vielfach wird im deutschsprachigen Raum angenommen nil stehe fur englisch not in list also nicht in der Liste Dies habe historische Grunde es entstamme der Programmiersprache Lisp die als einzige Datenstruktur den in Blattrichtung verketteten Binarbaum kennt der aber gewohnlich nur zur Darstellung einfach verketteter Listen genutzt wird Als Nullwert wurde nil zwar zuerst nur in Lisp genutzt mit Bedeutung einer leeren Liste jedoch ist dies nicht auf not in list zuruckzufuhren None Bearbeiten Weiterhin ist teilweise die Bezeichnung None fur einen Nullwert gebrauchlich wie z B in der Programmiersprache Python Nothing Bearbeiten Nothing stellt in der Programmiersprache Visual Basic eine nicht initialisierte oder auf Nothing gesetze Variable fur die Instanz einer Klasse dar Prufung auf Null oder Nothing erfolgen mit If IsNull var Myvar Then If obj MyClass Is Nothing Then null NULL nullptr Bearbeiten In Java werden Objekte nur uber Referenzen angesprochen Eine Objektreferenz die kein Objekt referenziert bekommt den Wert null zugewiesen Dies entspricht in etwa der Verwendung des Nullzeigers in C und C welcher durch das Makro NULL oder seit C 11 durch das Schlusselwort nullptr reprasentiert wird NaN Bearbeiten Nach der Norm IEEE 754 wird fur Gleitkommazahlen mit undefinierten oder nicht darstellbaren Werten die Bezeichnung NaN engl not a number verwendet NaN sind reservierte Bitmuster die verschieden sind von jedem erlaubten Wert NaN ist beispielsweise Ergebnis der Division 0 durch 0 Sentinel oder Wachterwert Bearbeiten Hauptartikel Sentinel Programmierung Ein Sentinel kann wie ein NULL Zeiger als echter Wert nicht vorkommen In Suchschleifen wird er mit dem Suchargument beschickt so dass die Programmlogik in jedem Fall auf ein Ergebnis gefunden lauft Eine Abfrage auf das Ende der Liste ist damit gleichzeitig getatigt Nach der Schleife wird untersucht auf welche Weise sie beendet wurde und wenn dies uber den Sentinel geschah wird das Gesamtergebnis auf nicht gefunden abgeandert Abgrenzung BearbeitenEin Nullwert kann nicht mit der Zahl Null identifiziert werden da ein Nullwert nicht als Zahl zu verstehen ist Ein Nullwert ist ebenso von der leeren Menge zu unterscheiden da er nicht als Menge zu verstehen ist Nullzeichen Bearbeiten Hauptartikel Nullzeichen Viele Zeichensatze haben an der Code Position 0 ein Steuerzeichen Es wird normalerweise mit NUL abgekurzt Nullgerat Bearbeiten Hauptartikel Nullgerat Viele Betriebssysteme definieren ein virtuelles Ausgabegerat das die aufgenommenen Daten einfach verwirft Unter Windows ist dies etwa NUL unter Unix a href dev null html title dev null dev null a unter AmigaOS NIL So kann beispielsweise eine unerwunschte Ausgabe eines Befehls unterdruckt werden Siehe auch BearbeitenNichts Null Datentyp ZeigerEinzelnachweise Bearbeiten E F Codd Extending the Database Relational Model to Capture More Meaning 1979 Abschnitt 2 3 S 7 Kernighan Ritchie Programmieren in C Zweite Ausgabe 1990 S 99 MSDN null C Reference englisch abgerufen am 6 Mai 2011 MSDN Nullable Types C Programming Guide englisch abgerufen am 6 Mai 2011 The Third Manifesto Date amp Darwen englisch abgerufen am 6 Mai 2011 Abgerufen von https de wikipedia org w index php title Nullwert amp oldid 238978578