Sam & Max » namespace http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Qu’est-ce qu’un namespace ? 10 http://sametmax.com/quest-ce-quun-namespace/ http://sametmax.com/quest-ce-quun-namespace/#comments Thu, 28 Nov 2013 06:42:31 +0000 http://sametmax.com/?p=8103 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().

]]>
http://sametmax.com/quest-ce-quun-namespace/feed/ 10