Bueno, no puedo estar seguro de lo que tu profesor quiso decir, pero tengo algunas ideas.
En primer lugar, el código como este puede ser "no tan obvia":
someObjectPointer->foo()->bar()->foobar()
Usted realmente no puede decir lo que es el resultado de foo()
, y por lo tanto no se puede decir realmente en ¿Cómo se llama el bar()
? ¿Es ese el mismo objeto? O tal vez es un objeto temporal que se está creando? O tal vez es algo más?
Otra cosa es si tiene que repetir el código. Consideremos un ejemplo como este:
complexObject.somePart.someSubObject.sections[i].doSomething();
complexObject.somePart.someSubObject.sections[i].doSomethingElse();
complexObject.somePart.someSubObject.sections[i].doSomethingAgain();
complexObject.somePart.someSubObject.sections[i].andAgain();
compararlo con tales:
section * sectionPtr = complexObject.somePart.someSubObject.sections[i];
sectionPtr->doSomething();
sectionPtr->doSomethingElse();
sectionPtr->doSomethingAgain();
sectionPtr->andAgain();
se puede ver cómo el segundo ejemplo no sólo es más corto, pero más fácil de leer.
veces la cadena de funciones es más fácil, ya que no tiene que molestarse con lo que vuelven:
resultClass res = foo()->bar()->foobar()
vs
classA * a = foo();
classB * b = a->bar();
classC * c = b->foobar();
Otra cosa es la depuración. Es muy difícil depurar cadenas largas de llamadas a funciones, porque simplemente no puede entender cuál de ellas causa el error. En este caso, rompiendo la cadena ayuda mucho, por no hablar de que puede hacer algunas comprobaciones adicionales también, como
classA * a = foo();
classB * b;
classC * c;
if(a)
b = a->bar();
if(b)
c = b->foobar();
tanto, para resumir, no se puede decir que es una "mala" o "buena "estilo en general. Tienes que considerar tus circunstancias primero.
Nunca había escuchado eso. El único beneficio que puedo ver es que si obtiene un error de un puntero nulo, puede decir a partir del número de línea cuál fue la desreferencia que fue, y es marginalmente más fácil examinar el puntero intermedio en un depurador. Pero si existiera el peligro de una desreferencia nula, debería verificarlo explícitamente antes de la segunda línea. No, no puedo ver una buena razón. – Rup
Es más fácil depurar una cosa. Es más simple probar si el terminal es nulo. –
Tal vez porque eso ayudará cuando tenga un puntero nulo sin referencias y esté tratando de averiguar cuál.De esta forma, cuando comprenda la línea de error (de un depurador, por ejemplo) sabrá qué puntero es) – Mohammad