¿Has Pensado en Usar un Namespace en C++?

Como alguien que empezó con Python y después aprendió C++, el concepto de namespaces fue algo nuevo para mi. Por mucho tiempo, estuve interactuando con los de la biblioteca estándar, pero nunca escribí uno por mi mismo. Sin embargo, durante un proyecto personal (una emuladora, si tenés interés!), me di cuenta de que tenía muchas funciones relacionadas, pero no tenía una manera buena de organizarlas. Una clase tenía demasiada capacidad, pero al mismo tiempo no podía dejarlas como funciones individuales. Necesitaba otra manera de ponerlas en grupo.

Aquí un namespace se sirve muy bien. Un namespace es una cosa que te deja poner funciones en un grupo debajo de un nombre. Es muy simple:

C++
namespace foo
{
  void find();
}

Y después se puede usar las funciones como esto:

C++
foo::find();

Comparado una clase, un namespace menos capacidad. Una clase es muy buena si querés objetos que tienen datos y métodos internos, y querés que los métodos pueden actuar en los datos. Por otro lado, un namespace es mucho más simple. Es simplemente algo que envuelve una colección de variables y métodos. No solo ayuda a organizar el código, pero también previene la situación en que dos funciones con el mismo nombre existen.

En C++ si hay dos funciones con el mismo nombre, el compilador te da un error diciendo que el nombre está usado en otra parte del código. Por ejemplo, imagina que estás usando la función std::find de la librería STL, pero querés hacer tu propia función find. Si envolvés la función en un namespace, podés prevenir este problema. Vos simplemente usás la función por llamar mi_namespace::find en lugar de find.

Lo que estoy diciendo aca no es que siempre hay que usar namespaces. Lo importante es que hay que considerar la funcionalidad que necesita tu código. Cuando se usa una clase, existe la posibilidad de tener variables miembros y funciones privadas y funciones publicas. En algunos casos, es mejor no tener esta posibilidad. Si lo necesitás, es mejor que usás una clase, pero si no, un namespace puede ser exactamente lo que necesitás.

Si querés leer más sobre namespaces, he incluido unas referencias debajo.

Referencias para Namespaces

Microsoft Referencía para Namespaces

CppReference para Namespaces


Publicado

en

, ,

por

Comentarios

Deja un comentario

es_ARES