Qu’est-ce qu’un namespace ? 10


Un mot qui vient et qui revient comme on en a des tas en informatique, et qui est utilisé par tout le monde comme si chacun était supposé savoir.

Très énervant quand on ne sait pas ce que ça veut dire.

Un namespace, ou espace de noms, est simplement un conteneur de noms, un groupe.

On s’en sert pour pouvoir distinguer deux choses qui ont le même nom.

Par exemple, un trou du cul peut être un anus ou un connard. Si quelqu’un fait la mention d’un “trou du cul”, j’ai besoin de contexte pour savoir si il parle d’un orifice ou d’un fils d’horreur. Ce contexte peut être donné par un namespace.

Comment est représenté un namespace dépend de l’outil utilisé.

Ainsi, en XML, c’est un préfixe puis deux points :

<xsd:element></xsd:element>
<taoisme:element></taoisme:element>

Ici j’ai deux balises “element”, mais elles sont préfixées par deux namespaces : xsd et taoisme.

C’est tout. Il n’y a rien d’autre caché derrière le namespace, c’est simplement un moyen de s’assurer qu’on sait bien de quoi on parle.

Certains namespaces sont standardisés. Par exemple, xsd est un namespace réservé aux balises qu’on retrouve dans un fichier .xsd. D’autres sont créés par les utilisateurs pour des raisons d’organisation.

En effet, un des avantages du namespace, c’est qu’il évite que deux références homonymes ne s’écrasent l’une l’autre.

Par exemple en Python, le nom du module qui contient une fonction peut servir de namespace.

Si je fais :

import os
import shelve

Alors j’ai accès à trois fonctions open():

  • os.open(): la fonction du open() du module os dont le nom est préfixé par le namespace os.
  • shelve.open(): la fonction du open() du module shelve dont le nom est prefixé par le namespace shelve.
  • open(): la fonction du open() dont le nom n’est PAS préfixé est qui est donc dans le namespace en cours.

Et aucune fonction ne s’écrase l’une l’autre. Le nom du module, étant utilisé comme namespace, permet la distinction pour l’humain ET la machine.

Dans ce langage, cependant, on peut copier une référence d’un namespace à l’autre. Par exemple :

from datetime import date

Ceci va importer date et le rendre disponible dans le namespace en cours. Du coup on aura pas besoin de préfixer date pour l’utiliser dans le namespace en cours, mais en contrepartie, on ne pourra pas créer de variable date car cela écraserait la référence précédente.

Si vous prenez par exemple PHP 5 qui n’avait pas encore de mécanisme de namespace à l’époque, les dev étaient obligés de créer artificiellement un namespace en allongeant le nom de toutes leurs fonctions avec ‘sujet_’. Ce qui donnait des noms à rallonge du genre : mysql_real_escape_string().

10 thoughts on “Qu’est-ce qu’un namespace ?

  • Retep

    Exemple très parlant!
    Maintenant si on me demande d’expliquer ce terme je parlerai d’anus et de trou du cul :)

  • lucyend

    C’est mon patron qui va être content quand je lui expliquerai enfin avec des termes qu’il comprendra.

  • bob

    Bonjour,
    j’ai besoin de du contexte

    simple suggestion :
    Comment est représenté La représentation d’un namespace dépend de l’outil utilisé.

  • Sam Post author

    Ceci est une question de style, et j’aime la version originale.

  • Recher

    Un truc de fou, ce serait d’essayer de recenser tout ces “mots d’informaticien” dans un même site / article, avec des liens vers les définitions.

    Ce serait l’article : “toi aussi apprends à parler comme un informaticien”.

    Boilerplate_code, Snippet, Sandbox, get/set, sérialization, écosystème, API, migration, greenfield/brownfield, clé-valeur, [re]factorisation, injection de dépendance, log, dette technique, sucre syntaxique, architectural drill, proof of concept, high/low level, wrapper, encodage, template, transtypage, idiomes, fork, commentaire, bit rot, bite, rote, mon cul sur la commode…

    Allez, au boulot !

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.