Hola, estoy tratando de entender cuál es la mejor manera de limitar mi riesgo con respecto al alcance local de las funciones. Según tengo entendido, mis opciones para limitar el potencial de contaminar el alcance Here desde dentro de la ejecución de una función son declarar mis variables locales o usar Default Local. Sin embargo, cada uno de estos tiene algunos problemas:
Local predeterminado:
- Los valores de referencia pueden depender del contexto, ya que los nombres que no se han definido localmente recurren a Aquí y luego posiblemente (si Nombres predeterminados a aquí está desactivado) Global y luego a la tabla actual. Como se indica en los documentos, esto puede significar que el comportamiento es menos predecible ya que los valores dependen del contexto.
Declaración explícita:
- Los valores de referencia pueden depender del contexto, ya que los nombres aún usan este comportamiento alternativo hasta que se declaran si no se declaran en los nombres locales.
- Las asignaciones pueden filtrarse accidentalmente en el ámbito Aquí. Es decir, si un nombre que pretende ser local se omite de las declaraciones de nombres locales, contaminará el ámbito Here circundante.
- En general, esta contaminación de alcance externo es difícil de rastrear.
- Por ejemplo, si llama a una función en un For donde usa "i" como un iterador y esa función también tiene un For que usa i y no puede declararlo como local, esto afectará su bucle For externo. De acuerdo, este es un error obvio del programador, pero es fácil de hacer y difícil de depurar.
En mi opinión, la opción ideal sería poder declarar algo como "Local estricto", que siempre trataría los nombres no calificados (tanto al asignar valores como al hacer referencia a valores) como ámbitos locales y circundantes que solo serían accesibles con nombres calificados. Esto me permitiría no arriesgarme a contaminar los ámbitos circundantes y me obligaría a declarar cuándo estoy dependiendo de esos ámbitos, limitando así la contaminación local de los ámbitos circundantes.