¿Hay alguna diferencia entre estos dos? El resultado es el mismo, pero el primero parece incorrecto. s1.concat (s2) .concat (S3) .concat (S4); ((s1.concat (s2)). concat (S3)). concat (S4);

El primero me parece perfectamente bien. La diferencia es la forma en que lo miras.

El primero está encadenado. Como desarrollador, sé que cualquier lenguaje que admita cadenas como esta devolverá el resultado de la primera función, pero debido a que hay otra función, el resultado se utilizará como entrada para esa. Esto es cierto hasta que se alcanza el final de la cadena, y todo devuelve un resultado.

Ahora el otro, se ve desde el punto de las matemáticas. Si estás acostumbrado a las matemáticas, pero no tanto a la programación, eso tiene sentido para ti. Primero obtenemos el resultado de uno, luego obtenemos el resultado de uno y dos y así sucesivamente. Aquí estás resolviendo una ecuación, paso a paso, para alcanzar el mismo resultado. También podría decir ((a + b) + c) + d. Empiezas en el nivel más profundo y trabajas para salir.

Para mí, la primera opción es mucho más legible y lógica que la versión matemática. También con cadenas, por ejemplo en javascript, puede hacer esto:

var text = s1.concat (s2)
.concat (S3)
.concat (S4);

.. que para algunas personas también es más fácil de leer, ya que estas cadenas se vuelven cada vez más complejas, no solo con la misma función, sino con una multitud de ellas.

Son los mismos en todos los idiomas que usan una sintaxis como esta para la aplicación de métodos que conozco (de los cuales hay docenas). El operador de aplicación de método es asociativo a la izquierda en prácticamente todos los idiomas principales que tienen un operador de aplicación de método, en gran parte porque tiene muy poco sentido que sea asociativo a la derecha.

No, no hay diferencia y la primera es más clara de leer, pero igualmente correcta.

Es similar cuestionar si esto:

1 + 3 + 5 = 9

es diferente a esto:

((1) + 3) + 5 = todavía 9

La única diferencia sería en un idioma (no se me ocurre ninguno) que evalúe las concatenaciones de derecha a izquierda. Está seguro de escribirlo de cualquier manera, y el resultado final en un lenguaje compilado debe ser idéntico en ambos casos. (Un buen compilador ignorará los paréntesis adicionales).

Todas las respuestas son correctas, pero me gusta la respuesta de Al Klein la mejor

No hay diferencia. Aunque intente encadenar una parte de la operación, no habrá ningún efecto particular. Todos ellos son de igual orden. Para el compilador, todo lo que importa es el orden léxico. Entonces piense en los otros que van a leer su código.