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.