¿Hay algún beneficio práctico en el uso de nombres de archivos de unidades largas como MyLib.MyUtils.pas o es solo una especie de prefijo del nombre de la unidad?Espacios de nombres en Delphi
Respuesta
espacios de nombres, al igual que todos los identificadores, tienen el propósito de organizar.
Así usarlos, sólo beneficios si su proyecto se organiza de una manera mejor. Este asunto tan subjetivo (¡ha habido 'guerras' incluso en las convenciones de nombres más simples!), Tan imposible de responder realmente.
Here is some documentation sobre cómo funcionan los espacios de nombres en Delphi.
Tenga en cuenta que los espacios de nombres 'verdaderos' (donde más de una DLL genérica puede contribuir al mismo espacio de nombres; así es como funcionan los espacios de nombres en el mundo .NET) no son posibles en Delphi: podría ir por BPL, pero eso no es lo mismo que una 'DLL genérica'. Esto no es una limitación de Delphi en sí, sino de la forma en que los archivos DLL nativos funcionan en Windows.
--jeroen
he editado esta respuesta en respuesta a los comentarios y mi evidente falta de comprensión de la cuestión.
El único beneficio práctico que veo en el uso de nombres de unidades, como usted sugiere es que el IDE va a clasificar las unidades de una manera mejor que sin el prefijo "espacio de nombres". Preferiría usar diferentes carpetas en su lugar.
En algunos casos podría tener sentido - a causa de conflictos de nombres. Por ejemplo, podría tener una unidad MyLib.Utils
y una unidad de MyOtherLib.Utils
Este hecho puede evitar una cierta confusión (tanto para el IDE y por sí mismo).
También podría simular un espacio de nombres utilizando una clase abstracta con los métodos estáticos de clase:
type
Utils = class abstract
class procedure Beep; static;
end;
...
Utils.Beep;
Si entiendo bien Serg, pregunta por los puntos ** dentro ** (no después) de los nombres de las unidades. –
Puede que tenga razón, ya que la pregunta no es muy detallada. Edité mi respuesta para reflejar esta posibilidad. – jpfollenius
Claro que la pregunta es sobre nombres de unidades "punteadas".Por lo que yo sé, el punto es solo otro símbolo en el prefijo del nombre de la unidad y nada más. Por ejemplo, no puede escribir "usa MyLib" para usar MyLib.MyUtils o usar el identificador "MyLib" de ninguna otra manera. – kludg
Ver:
Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?
espacios de nombres en Delphi están apoyados por el compilador, por lo que el punto en los nombres de las unidades tiene un significado especial. Puede usar el nombre completo calificado del archivo, o puede usar un estilo de 'acceso directo' para el nombre del archivo si la opción dcc32.exe está configurada correctamente.
Por lo que también podría escribir
uses
MyBestTools;
para evitar el nombre calificado completo
uses
MyCompany.MyProject.MyLibrary.MyBestTools;
responsabilidad: Actualmente todo esto es teoría, sino que hará uso de espacios de nombres en algunos proyectos iin un futuro próximo
Para obtener un mejor soporte IDE, siéntase libre de votar en QualityCentral por esta característica de sugerencia:
He encontrado las mismas opciones en IDE (Delphi 2009): Proyecto/Opciones/Delphi Compiler/Espacio de nombres predeterminado, Prefijo NameSpace – kludg
En Delphi XE7 IDE se llama "Unit scope names" – SoftDeveloper
@SoftDeveloper hace que XE7 todavía tenga '- NS
- 1. ¿Espacios de nombres en Redis?
- 2. Espacios de nombres en JSON
- 3. Animaciones de espacios de nombres
- 4. espacios de nombres XElement (¿Cómo?)
- 5. estilo y espacios de nombres
- 6. Delphi: unmangle nombres en BPL
- 7. herencia y espacios de nombres
- 8. ¿Squeak admite espacios de nombres?
- 9. ¿HTML5 admite espacios de nombres?
- 10. StAX y espacios de nombres
- 11. ¿Analizar espacios de nombres XML?
- 12. cómo usar espacios de nombres en css?
- 13. PHP carga automática en espacios de nombres
- 14. Espacios de nombres en paquetes R
- 15. Módulos v. Espacios de nombres en F #
- 16. clases Adelante declaran en espacios de nombres
- 17. espacios de nombres C# en web.config
- 18. Clase parcial en diferentes espacios de nombres
- 19. Espacios de nombres (predeterminado) en JDOM
- 20. Espacio de nombres y espacios de nombres secundarios
- 21. C++: "Espacios de nombres de clase"?
- 22. Uso de espacios de nombres PHP
- 23. espacios de nombres automáticas de importación
- 24. Espacios de nombres y resolución de operador
- 25. Obtenga espacios de nombres de clojure disponibles
- 26. python: xml.etree.ElementTree, quitando "espacios de nombres"
- 27. C++ Espacios de nombres y plantillas
- 28. Espacios de nombres XML y atributos
- 29. ¿Por qué múltiples espacios de nombres?
- 30. XSD con importaciones y espacios de nombres
+1 enlace de interés. Ni siquiera sabía que hay "espacios de nombres oficiales" en Delphi. – jpfollenius
Parece que el artículo del documento se escribió para Delphi.NET (archivo dcuil, etc.). Embarcadero debe editarlo para documentar Delphi para espacios de nombres de Win32. – kludg
+1 gracias por el enlace ... Ahora estoy buscando cualquier referencia de qué versiones admiten estos prefijos de espacio de nombres ... –