¿Cual es el motivo por el cual sería más rápido el acceso? El ejemplo que envió Diego muestra que el código IL generado es prácticamente el mismo. Es más, en el caso del código generado para el With por el compilador de VB, éste generaba una variable temporaria para almacenar una copia de la referencia sobre la cual opera, así que tenía un par de instrucciones adicionales, aunque esto no es muy significativo.
El With es lo que denominan "syntactic sugar", en otras palabras, elementos del lenguaje que no afectan la funcionalidad pero hacen más digerible el desarrollo y la comprensión del código fuente. Me parece que hace años ví comentarios de los desarrolladores del lenguaje C# acerca del motivo por el cual habían decidido no incluirlo, y si bien mi memoria no es muy buena, me parece que el argumento era que no agregaba nada, y que por otro lado alentaba abusos, donde un With anidaba a otros With, en bloques demasiado largos donde se perdía el contexto de cual era la referencia sobre la cual se estaba operando. Saludos, Fernando Tubio ----- Original Message ----- From: Juan Granillo To: [email protected] Sent: Tuesday, September 11, 2007 11:25 AM Subject: [puntonet] Proclama para salvar instancias Exacto. La ventaja del uso del with ...end with no es que evita la creacion de mas de una instancia (ya que esto no ocurre), sino que hace que el acceso a la referencia de la instancia sea mas rapida. -----Mensaje original----- De: [email protected] [mailto:[EMAIL PROTECTED] nombre de Fernando Tubio Enviado el: martes, 11 de septiembre de 2007 10:10 Para: [email protected] Asunto: [puntonet] Proclama para salvar instancias Esto es incorrecto, se trata siempre de una misma referencia. Usar la misma variable, u otra que contenga una referencia al mismo objeto, varias veces para acceder a distintas propiedades del objeto al cual hace referencia dicha variable, no involucra la creación de nuevos objetos o algún tipo de ineficiencia. En el caso que describís, "Texto1" contiene una referencia a un objeto que ya fue creado previamente. Saludos, Fernando Tubio ----- Original Message ----- From: Gastón Dorigo To: [email protected] Sent: Monday, September 10, 2007 3:09 PM Subject: [puntonet] Proclama para salvar instancias Gracias por tu observación, ahora que hago un poco más de memoria, recuerdo que el concepto era la siguiente. El el caso de Texto1.text = "Hola" el procesador crea una referencia al objeto y lee el atributo Si luego agrego Texto1.tag = 0 el procesador vuelve a crear otra instancia de texto1 para leer el atributo tag En cambio con with // end with el procesador crea una única instancia y accede a la misma para todos los atributos/metodos/eventos que se invoquen en el bloque. Espero sus comentarios Saludos . -------------------------------------------------------------------------- De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Juan Granillo Enviado el: Lunes, 10 de Septiembre de 2007 11:22 a.m. Para: [email protected] Asunto: [puntonet] Proclama para salvar instancias Hola Gaston, Recuerdo bien esa charla de seara en el Heraton. Mas alla de quedar un poco mas prolijo, la ventaja principal es que el procesador mantiene la referencia al objeto "a mano" (si me permiten la expresion), y no necesita buscarla para la ejecucion de cada metodo. Saludos Juan -----Mensaje original----- De: [email protected] [mailto:[EMAIL PROTECTED] nombre de Gastón Dorigo Enviado el: viernes, 07 de septiembre de 2007 18:36 Para: [email protected] Asunto: [puntonet] Proclama para salvar instancias Muy buena la idea de la proclama, me sumo con una consulta: Hace un tiempo en un evento en el Hotel Sheraton, Daniel Seara explicaba las ventajas de utilizar el bloque with / end with, por ejemplo WITH textbox1 .text = "texto" .tag = 0 . etc. END WITH La consulta es porque no recuerdo ni puedo deducir cuales son los motivos que validan esta afirmación, si alguien recuerda o me puede ayudar a deducir una justificación válida se lo agradecería porque varios alumnos me lo han consultado y todavía estoy buscando una respuesta razonable. Saludos. ------------------------------------------------------------------------ De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Damián Herrera Enviado el: Viernes, 07 de Septiembre de 2007 06:01 p.m. Para: [email protected] Asunto: [puntonet] Proclama para salvar instancias Ya que estamos, yo también me sumo a la proclama!!! Por todos los medios posibles evitar la siguiente estructura de código: Try ... ... Catch ex As Exception Throw(ex) ... End try Esto es lo mismo que no capturar el error, en lugar de hacer esto no hagan nada! Se van a ahorrar tiempo de procesamiento :) Si no, asegurense de hacer los rollbacks o cancelar la operación antes de la línea "Throw(ex)". Feliz fin de semana! Damián Herrera ---------------------------------------------------------------------- From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Diego Jancic Sent: Friday, September 07, 2007 5:44 PM To: [email protected] Subject: [puntonet] Proclama para salvar instancias Hola gente!, Estoy modificando un programa que hicieron muchos programadores (incluidos semi-seniors y seniors), y me canse de ver algunas cosas sin sentido. Por ese motivo estoy realizando esta proclama general, para que si alguien lo hace, lo evite la proxima vez. ;-) Cuando tenemos un codigo de este estilo: MiClase instancia = new MiClase(); instancia = UnServicio.ObtenerDesdeBD( . ); En ese caso, se estan creando 2 objetos cuando se deberia crear uno. Fijense que la 2da linea sobrescribe completamente la primera!! Y para agravar el problema, el metodo UnServicio.ObtenerDesdeBD hace algo con el parecido pero llamando a la base de datos o a un WS o a donde sea. Entonces se termina creando una instancia por capa, cuando en realidad se necesita una sola (o ninguna si el metodo devuelve null) Espero haberles ahorrado aunque sea 1 segundo de procesamiento en todo el tiempo de vida de su aplicación. Bueno, esto fue una pequeña contribución a todos ellos que por costumbre repiten estas cosas desde hace mucho tiempo (ojo, hace bastante yo tambien lo hacia!). Saludos y Happy Programming!, Diego __________ Información de NOD32, revisión 2513 (20070907) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com __________ Información de NOD32, revisión 2519 (20070910) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com __________ Información de NOD32, revisión 2521 (20070911) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com
