Ver Mensaje Individual
  #14  
Antiguo 18-09-2016
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Al recuerdo que hace un tiempo nos habías comentado sobre esa forma de usar el with, ¿Puede ser? ¿O recuerdo mal?

Suelo tener mis diferencias con Mario, pero creo que en esta coincido sobre como debería ser declarado el uso del with. Se me hace que si el problema del with pasa por su problema de ambigüedad y nomeclatura, la forma más familiar al estilo de Object Pascal debería tener la construcción "With As Do"

Ahora bien, también siento que de llevar esa forma de usarlo, al final no elimina nada... más bien está escondiendo un problema dentro de otro.
Como bien lo señala Agustín, ahora el problema se traduce en nombres de variables cortos.

La verdad es que entre tener esto:

Código Delphi [-]
With.Algo := ...

O el tener esto:

Código Delphi [-]
Clave.Algo := ...

Siendo Clave:

Código Delphi [-]
with TMiObject.Create as Clave do

No hemos ganado mucho que digamos.
Y la técnica sucia del nombre corto del ejemplo de Agustín, no deja de ser otra forma de llegar a lo mismo.

Aún así, considero que el with podría recibir algún tipo de mejora... y que merece cierta compasión y no pasarlo por la guillotina (no todavía...)
El problema de ambigüedad y debilidad del with se da cuando no se puede distinguir el objeto de referencia del resto de los posibles objetos con los que podría "interactuar". Porque hay casos en los que no hay problemas de distinción, como el ejemplo de muestra que hay en Delphi Basics:

Código Delphi [-]
type
  // Declare a customer record
  TCustomer = Record
    firstName : string[20];
    lastName  : string[20];
    address1  : string[100];
    address2  : string[100];
    address3  : string[100];
    city      : string[20];
    postCode  : string[8];
  end;

 var
  John, Sarah : TCustomer;

 begin
  // Set up the John's customer details
  With John do
  begin
    firstName := 'John';
    lastName  := 'Smith';
    address1  := '7 Park Drive';
    address2  := 'Branston';
    address3  := 'Grimworth';
    city      := 'Banmore';
    postCode  := 'BNM 1AB';
  end;

Si la mejora pasa por tener alguna "marca" que elimine esa ambigüedad ¿Porqué no pensar en algún carácter especial, como el & para indicar que lo que sigue pertenece al objeto con el que se está haciendo uso en la construcción With? Así podríamos entonces esperar cosas como:

Código Delphi [-]
 begin
  // Set up the John's customer details
  With John do
    &firstName := FirstName; // FirstName podría ser una variable global... & es la marca e identifica a John

Aunque esto no me suena muy Object Pascal friendly... Quiero pensar que podría hacerse de alguna otra forma. Yo por el momento no soy capaz de pensar otra alternativa de llevarlo a cabo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita