No en términos de legibilidad, naturalmente, ya que siempre puede organizar los métodos separados en líneas separadas. Más bien, ¿es peligroso, por alguna razón, encadenar un número excesivamente grande de métodos? Uso el método de encadenamiento principalmente para ahorrar espacio al declarar variables individuales de un solo uso y, tradicionalmente, utilizar métodos de retorno en lugar de métodos que modifican al que llama. Excepto por los métodos de cuerda, esos me encadenan sin piedad. En cualquier caso, a veces me preocupa el impacto del uso de cadenas de métodos excepcionalmente largas, todo en una línea.¿Puede una cadena de métodos de C# ser "demasiado larga"?
Digamos que necesito actualizar el valor de un elemento basado en el nombre de usuario de alguien. Lamentablemente, el método más corto para recuperar al usuario correcto se ve de la siguiente manera.
SPWeb web = GetWorkflowWeb();
SPList list2 = web.Lists["Wars"];
SPListItem item2 = list2.GetItemById(3);
SPListItem item3 = item2.GetItemFromLookup("Armies", "Allied Army");
SPUser user2 = item2.GetSPUser("Commander");
SPUser user3 = user2.GetAssociate("Spouse");
string username2 = user3.Name;
item1["Contact"] = username2;
Todo con un 2 o 3 tiene una duración de sólo una llamada, por lo que podría condensarse como la siguiente (que también me permite deshacerse de un aspirante a superflua 1):
SPWeb web = GetWorkflowWeb();
item["Contact"] = web.Lists["Armies"]
.GetItemById(3)
.GetItemFromLookup("Armies", "Allied Army")
.GetSPUser("Commander")
.GetAssociate("Spouse")
.Name;
Es cierto que parece mucho más tiempo cuando todo está en una línea y cuando tiene int.Parse(ddlArmy.SelectedValue.CutBefore(";#", false))
en lugar de 3
. Sin embargo, esta es una de las longitudes promedio de estas cadenas, y puedo prever fácilmente algunos recuentos excepcionalmente más largos. Excluyendo la legibilidad, ¿hay algo de lo que deba preocuparme estas 10+ cadenas de métodos? ¿O no hay daño al usar cadenas de métodos muy largas?
Diez no es nada. Si tuvieras más de, digamos, diez mil, podrías empezar a tener problemas. Dijiste que haces esto para "ahorrar espacio". No entiendo qué espacio es el que cree que está salvando, o por qué cree que ese espacio es un recurso escaso que requiere una supervisión cuidadosa. ¿Puede explicar qué evidencia empírica respalda su creencia de que está ahorrando en el uso de un recurso escaso o costoso? –
No soy un experto, pero creo que su segundo ejemplo es mucho más legible. Si tuviera la tarea de mantener ese ejemplo, entendería mucho más rápidamente lo que estaba haciendo el segundo. Hay mucho menos código superfluo. Imagino que la legibilidad debería ser la principal preocupación aquí. Si sus cadenas son más fáciles de leer, eso es bueno –
@Eric No he afirmado que algo sea un recurso escaso o costoso. El espacio que estoy guardando es un par de pésimos bytes de espacio de archivos en el archivo de código para indicar "; \ r \ nCLASS bar = foo" entre los métodos encadenados, que a su vez me parece más limpio. Teniendo en cuenta que me parece limpio es cuestión de legibilidad y * excluyo explícitamente la legibilidad como una preocupación *, ¿de dónde sacas que encuentro que este espacio requiere "cuidado cuidadoso"? –