2010-02-04 10 views
53

Dada la siguiente llamada a la función en C:¿El orden de ejecución de los parámetros garantiza en Java?

fooFunc(barFunc(), bazFunc()); 

El orden de ejecución de barFunc y BazFunc no se especifica, por lo barFunc() puede ser llamado antes de bazFunc() o bazFunc() antes barFunc() en C.

¿Java especifica un orden de ejecución de expresiones de argumento de función o como C es eso no especificado?

+0

pregunta relacionada: [¿Orden de ejecución de los métodos que describen una instancia y un argumento en Java?] (Http://stackoverflow.com/questions/13724952/order-of-execution-of-methods-describing-an -instance-and-an-argument-in-java/13725048) – bacar

Respuesta

59

Desde el Java Language Specification (sobre expresiones):

15.7.4 listas de argumentos se evalúan de izquierda a derecha

En un método o constructor invocación o instancia de clase expresión de creación, expresiones de argumento puede aparecer dentro de entre paréntesis, separados por comas. Cada expresión de argumento parece ser completamente evaluada antes de cualquier parte de cualquier expresión de argumento a su derecha.

+8

Si bien esto es cierto, no codifique de modo que dependa del orden de ejecución. Simplemente agrega complejidad sin agregar funcionalidad. – Jon

+7

De hecho, "se recomienda que el código no dependa de manera crucial de esta especificación". http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 – trashgod

+30

@Jon ¡No estoy de acuerdo! si está en la especificación, entonces puede confiar en ello. Por ejemplo, para leer un rectángulo de un archivo, uso este código: myRect = new Rectangle (scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt()); Es conciso y simple. Una implementación más larga sería una complejidad innecesaria. –

Cuestiones relacionadas