Referencia de secuencias de comandos
Last updated
Last updated
Esta página de referencia amplía las prácticas recomendadas incluidas en las estrategias de creación de secuencias de comandos con más detalles sobre las bibliotecas de códigos, el etiquetado y la aplicación de estilos. Utilizaremos Python para ilustrar los conceptos que se indican a continuación; no obstante, tenga en cuenta que se aplican los mismos principios en Python y C#(Zerotouch), solo que con una sintaxis diferente.
Las bibliotecas estándar son externas a Dynamo y están presentes en los lenguajes de programación Python y C# (Zerotouch). Dynamo también tiene su propio conjunto de bibliotecas que corresponden directamente con su jerarquía de nodos, lo que permite al usuario crear mediante código cualquier elemento que se pueda crear con nodos y líneas. A continuación, se muestra una guía sobre los elementos a los que cada biblioteca de Dynamo proporciona acceso y cuándo utilizar una biblioteca estándar.
Bibliotecas estándar y bibliotecas de Dynamo
Las bibliotecas estándar de Python y C# se pueden utilizar para generar datos avanzados y estructuras de flujo en el entorno de Dynamo.
Las bibliotecas de Dynamo se corresponden directamente con la jerarquía de nodos para crear geometría y otros objetos de Dynamo.
Bibliotecas de Dynamo
ProtoGeometry*
Funciones: Arco, Cuadro delimitador, Círculo, Cono, Sistema de coordenadas, Cubo, Curva, Cilindro, Borde, Elipse, Arco de elipse, Cara, Geometría, Hélice, Grupo de índice, Línea, Malla, Curva Nurbs, Superficie Nurbs, Plano, Punto, Polígono, Rectángulo, Sólido, Esfera, Superficie, Topología, T-Spline, UV, Vector, Vértice.
Cómo importar: import Autodesk.DesignScript.Geometry
``
DSCoreNodes
Funciones: Color, Rango de colores 2D, Fecha y hora, Intervalo de tiempo, IO, Fórmula, Lógica, Lista, Matemáticas, Árbol cuádruple, Cadena, Rosca.
Cómo importar: import DSCore
Teselación
Funciones: Rejilla convexa, Delaunay, Voronoi.
Cómo importar: import Tessellation
DSOffice
Función: Excel.
Cómo importar: import DSOffice
Nota: Tenga en cuenta que, al utilizar ProtoGeometry a través de Python o C#, se crean objetos no administrados, que requieren que la memoria se administre manualmente. Consulte la sección Objetos no administrados mostrada a continuación para obtener más información.
Durante la creación de secuencias de comandos, utilizamos constantemente identificadores para indicar elementos como variables, tipos, funciones y otras entidades. A través de este sistema de notación simbólica, podemos hacer referencia cómodamente a la información mediante etiquetas (normalmente compuestas por una secuencia de caracteres) mientras creamos los algoritmos. En la escritura de código, una correcta denominación de los elementos es importante para que este se pueda leer y entender con facilidad por parte de otras personas y por usted mismo en un momento posterior. A continuación se indican algunos consejos que se deben tener en cuenta al asignar nombres a los elementos de su secuencia de comandos:
Está bien utilizar abreviaturas, pero explique la abreviatura con un comentario:
Evite el etiquetado redundante:
Utilice lógica positiva para los nombres de las variables, en lugar de lógica negativa:
Dé preferencia a la "notación inversa":
Es más apropiado en términos estructurales.
Los alias se deben utilizar para acortar cadenas demasiado largas y a menudo repetidas:
El uso de alias puede generar rápidamente programas muy confusos y no estándares.
Utilice solo las palabras necesarias:
"Todo debe hacerse tan simple como sea posible, pero no más". – Albert Einstein
Por lo general, hay más de una manera de programar prácticamente cualquier cosa, por lo que su "estilo personal" de crear secuencias de comandos es el resultado de las innumerables pequeñas decisiones que usted toma (o no toma) a lo largo del camino. Dicho esto, la legibilidad y las posibilidades de mantenimiento del código son resultado directo de su coherencia interna, así como del cumplimiento de las convenciones estilísticas generales. Como regla general, el código que tiene el mismo aspecto en dos lugares diferentes, también debería funcionar de la misma manera. A continuación, se ofrecen algunos consejos para escribir código claro y coherente.
Convenciones para los nombres: (elija una de las convenciones siguientes para cada tipo de entidad del código y úsela siempre)
Variables, funciones, métodos, paquetes y módulos:
lower_case_with_underscores
Clases y excepciones:
CapWords
Métodos protegidos y funciones internas:
_single_leading_underscore(self, ...)
Métodos privados:
__double_leading_underscore(self, ...)
Constantes:
ALL_CAPS_WITH_UNDERSCORES
Consejo: Evite las variables de una sola letra (especialmente, l, O, I) excepto en bloques muy cortos, cuando el significado es claramente visible desde el contexto inmediato.
Uso de líneas en blanco:
Rodee las definiciones de clase y función de nivel superior con dos líneas en blanco.
Las definiciones de método dentro de una clase se rodean con una sola línea en blanco.
Se pueden utilizar líneas en blanco adicionales (con moderación) para separar grupos de funciones relacionadas.
Evite los espacios innecesarios:
Inmediatamente después de paréntesis, corchetes o llaves:
Inmediatamente antes de coma, punto y coma o dos puntos:
Inmediatamente antes del paréntesis de apertura que inicia la lista de argumentos de una llamada de función:
Inmediatamente antes del paréntesis de apertura que inicia una indexación o un fragmento:
Rodee siempre estos operadores binarios con un solo espacio a cada lado:
Vigile la longitud de las líneas:
No las alargue más allá de aproximadamente 79 caracteres.
La limitación de la anchura necesaria en la ventana del editor permite tener varios archivos abiertos en paralelo y posibilita el correcto funcionamiento de las herramientas de revisión de código que presentan las dos versiones en columnas adyacentes.
Las líneas largas se pueden dividir en varias líneas encerrando las expresiones entre paréntesis:
Evite los comentarios obvios y redundantes:
En algunos casos, se requieren menos comentarios para obtener un código más legible. Especialmente si ello le obliga a utilizar nombres de símbolo significativos en lugar de descripciones.
La adopción de buenos hábitos de codificación reduce la dependencia de los comentarios:
Consejo: Los comentarios indican por qué y el código indica cómo.
Tenga en cuenta el código abierto:
Los proyectos de código abierto se basan en los esfuerzos colaborativos de muchos desarrolladores. Estos proyectos necesitan mantener un alto nivel de legibilidad del código para que el equipo pueda trabajar en conjunto de la forma más eficiente posible. Por lo tanto, es recomendable examinar el código fuente de estos proyectos para observar lo que hacen estos desarrolladores.
Mejore las convenciones:
Pregúntese si cada una de las convenciones funciona o no para las necesidades en cuestión.
¿Se está poniendo en peligro la funcionalidad/eficiencia?
Consulte estas páginas wiki para obtener instrucciones sobre cómo escribir C# para Zerotouch y contribuir con Dynamo:
Este wiki describe algunas normas de codificación generales para documentar y probar el código: https://github.com/DynamoDS/Dynamo/wiki/Coding-Standards.
Este wiki describe específicamente las normas de nomenclatura de bibliotecas, categorías, nombres de nodos, nombres de puertos y abreviaturas: https://github.com/DynamoDS/Dynamo/wiki/Naming-Standards.
Objetos no administrados:
Cuando se utiliza la biblioteca de geometría de Dynamo (ProtoGeometry) desde Python o C#, los objetos de geometría que se creen no se gestionarán mediante la máquina virtual, y la memoria de muchos de estos objetos deberá limpiarse manualmente. Para limpiar objetos nativos o no administrados, puede utilizar el método Dispose o la palabra clave using. Consulte esta entrada wiki para obtener una descripción general: https://github.com/DynamoDS/Dynamo/wiki/Zero-Touch-Plugin-Development#dispose—using-statement.
Solo es necesario eliminar los recursos no administrados que no se devuelvan al gráfico y los que no almacenan una referencia. En el resto de esta sección, nos referiremos a estos objetos como geometría intermedia. Puede ver un ejemplo de esta clase de objeto en el código siguiente. La función de Zero Touch C# singleCube devuelve un único cubo, pero crea 10 000 cubos adicionales durante su ejecución. Podemos fingir que esta otra geometría se ha utilizado como geometría de construcción intermedia.
Es muy probable que esta función de Zero Touch bloquee Dynamo. Esto se debe a que hemos creado 10 000 sólidos, pero solo hemos almacenado uno de ellos y solo hemos devuelto ese mismo. Deberíamos desechar todos los cubos intermedios, excepto el que devolvemos. No debemos desechar lo que devolvemos, ya que se propaga en el gráfico y lo utilizan otros nodos.
El código fijo tendría un aspecto similar al siguiente:
Por lo general, solo es necesario eliminar geometría como Surfaces
, Curves
y Solids
. No obstante, por seguridad, puede eliminar todos los tipos de geometría (Vectors
, Points
y CoordinateSystems
).