Ein Namespace (deutsch „Namensraum“) ist ein benannter Bereich, der Bezeichner wie Variablen, Funktionen und Klassen gruppiert. Er verhindert Namenskollisionen: Zwei Bibliotheken können dieselben Namen verwenden, ohne sich gegenseitig zu überschreiben — der volle Name eines Elements setzt sich aus Namespace und Bezeichner zusammen.
Warum Namespaces?
- Namenskollisionen vermeiden: Ohne Namespace würde die zweite Definition einer Funktion die erste ersetzen.
- Struktur und Übersicht: Große Projekte lassen sich logisch in Bereiche aufteilen.
- Wiederverwendbarkeit: Bibliotheken können problemlos nebeneinander verwendet werden.
Beispiele in gängigen Sprachen
// PHP
namespace AppControllers;
class UserController { ... }
// C#
namespace MeineFirma.Projekt
{
class Kunde { ... }
}
// Java
package com.example.meinprojekt;
// C++
namespace std { ... }
// TypeScript
namespace Geo {
export function distance(a: Point, b: Point): number { ... }
}
In Python übernehmen Module und Pakete die Rolle von Namespaces: import math macht math.sqrt eindeutig. JavaScript-Module exportieren Namen explizit und vermeiden so globale Kollisionen.
Namespace vs. Klasse vs. Package
Ein Namespace ist keine Klasse: Er erzeugt keine Instanzen und enthält keinen ausführbaren Code, sondern ordnet nur Namen. Ein Package (Java) oder Modul (Python) ist eine physikalische Einheit (Verzeichnis/Datei), die zusätzlich zum Namespace eine Ablage-Struktur vorgibt. Beide Konzepte ergänzen sich.
Verwandte Themen: Objekt, Parameter, Rückgabewert, Datentyp, Syntax, Framework, API — sowie PHP-Befehle, C#-Befehle, Java-Befehle, TypeScript-Befehle.