Te respondo con más tranquilidad que estoy aburrido mientras termina la lavadora xddd
2. Si hago el mismo código en otro lenguaje diferente (invito a hacer
la misma función en otros lenguajes y así comparamos) será igual o más
dificil de comprender lo que hace, ya que el código es autodocumentado
solamente para las personas que conocen ese lenguaje (obviemos a todo
no programador porque entonces sería de perogrullo el que no sea capaz
de leer código).
En este caso la "dificultad" del código no esta en el lenguaje, no se
vb.net pero if, for, end if etc,etc es algo que comprende cualquier programador. La dificultad de compresión del código es culpa del API que estas usando, como todo framework/librería de uso general tiene metodos muy flexibles para ser usados en muchos contextos, estos métodos no dicen nada del problema concreto con el que estas tratando y esto es lo hace a ese código ilegible y feo con ganas. La solución es recubrir el API general con uno más especifico, con llamadas a funciones que oculten lo detalles o mejor aún con clases wrapper que encapsulen el componente en cuestion y te ofrezcan métodos con sentido en tu contexto.
3. Como se ha visto en las respuestas al experimento, si hay 10
programadores frente a un problema, habrá 10 soluciones diferentes con
10 codificaciones diferentes :).
Eso no implica que todas sean buenas :P.
4.
No solamente el lector no siempre conoce el lenguaje, sino que no
conoce las estructura o formas de hacer las cosas. Y que son muy
dificiles de entender sin ayuda. Por ejémplo las cadenas Lambda en C#,
el uso de patrones de arquitectura, codificaciones propias de los
frameworks, la recursividad, etc.
Si hablamos de conocimientos generales de programación, recursividad, inyección de dependencias, AOP etc,etc, pues obviamente si el que lo lee es un programador debera entender esas construcciones, es como entender un if o un for, si no entiendes eso pues logicamente no entenderas el código, que estudie primero. Otro tema son los frameworks/librerías, que no es conocimiento general sino especifico y hay miles de millones, por eso conviene recubrirlos de algún modo como decia antes.
5. El uso de librerias de clases en POO impide el libre uso de nombres
en la codificación. Y también las reglas básicas de legibilidad de
código como no poner nombres muy largos.
Lo mismo otra vez, recubre. Eso de que no poner nombres largos es una "regla basica de legibilidad"..., la longitud en el nombre de un metodo o variable es irrelevante, importa que exprese su intención, ¿¿el tamaño que más da??. (evidentemente si ocupa 200 caracteres hay algo mal, pero no en el nombre en si, si no que es tan largo porque ese metodo tiene demasiadas responsabilidades).
6.
En mi opinión, añadir código o partir el método con el objetivo de
clarificar la autodocumentación (hacer un método que encapsule los
métodos de nombres espantosos) no es solución porque "el comentario no
compila pero el código si". Además de dificultar la lectura del código
y su proposito al fragmentarlo en diferentes métodos, clases o incluso
páginas físicas.
¿En serio te parece más legible el churro de antes comparado con una función con 4 llamadas a métodos que expresan claramente el objetivo?, eso no puedo entenderlo. Yo cuando leo tu metodo no necesito la información exacta de como se pone la manita del cursor en el api de
vb.net, me basta con saber que se pone la manita y si necesito los detalles me voy al método que los contiene.
Algunos ejemplos concretos sobre el código, al principio de la función pones:
''' Pero dejando a discreción sobre qué celdas se va a omitir este comportamiento.
¿A que discrección?, luego si lo lees te enteras de que en la ultima fila no se pone porque es de borrado, pues pon eso en el comentario, una cosa es escribir código como un ensayo, y otra es que el primer comentario te deje con intriga para que sigas leyendo xddd
Otro ejemplo:
'' Cargo el comportamiento en cada celda.
'' En este caso en todas menos en la última que es la de borrado.
For x As Integer = 0 To numCeldas - 2
e.Row.Cells(x).Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(sender, "Editar$" & CType(e.Row.FindControl("lblidAmbito"), Label).Text & "@" & CType(e.Row.FindControl("lblDescripcion"), Label).Text))
Next
Un comentario que dice que se "carga el comportamiento" pero no dice que comportamiento se carga, si me leo la cabecera de la función descubro que el comportamiento es "hacer las filas editables", parece un puzzle leñe.
Por ejemplificar lo del wrapper, te haces una clase que encapsule la fila del grid y le pones métodos con sentido en tu contexto, algo así:
FilaGridAmbitos filaGrid = new FilaGridAmbitos(e);
filaGrid.hacerCeldasEditables();
filaGrid.resaltarSiEstaSeleccionada(idAmbito);
filaGrid.habilitarCursorSeleccionCuandoPaseElRatonPorEncima();
No es la caña tampoco, pero queda claro que estas tratando una fila del grid y que haces sus celdas editables, la resaltas si esta seleccionada y le pones el cursor cuando se pase por encima. Despues de escudriñar el código eso es lo que hace, el siguiente que se lo encuentre no tendrá que andar media hora escudiriñando que a lo mejor no tienen tanto tiempo libre como yo esta tarde xd.
Aunque lo suyo probablemente seria hacer un wrapper del grid completo y que el contralara el evento y tal y pascual, pero para eso tendría que conocer mejor el framework y el problema, pero vamos simplemente con esto da menos panico al pobre que le toque modificar luego ese código.
El código que has puesto es un ejemplo claro de precisamente lo que siempre critico de los comentarios, usarlos porque no dedicamos el suficiente esfuerzo a hacer el código verdaderamente legible. Si te sigue pareciendo tu código más legible/mantenible/bonito que las cuatro lineas de antes ya no se como explicartelo xddd.