¿Por qué no debería mezclar tabulaciones y espacios?

Resuelto Zeta asked hace 8 años • 1 respuestas

A menudo leo que no debería mezclar tabulaciones y espacios en Haskell, o que no debería utilizar tabulaciones en absoluto. ¿Por qué?

Zeta avatar Mar 08 '16 05:03 Zeta
Aceptado

El problema es doble. En primer lugar, Haskell es sensible a la sangría, por ejemplo, el siguiente código no es válido:

example = (a, b)
  where
    a = "Hello"
     b = "World"

Ambas encuadernaciones deben tener sangría con el mismo número de espacios/tabulaciones (consulte la regla de fuera de juego ). Si bien es obvio en este caso, está bastante oculto en el siguiente, donde denoto un espacio por ·y una tabulación por »:

example = (a, b)
··where
····a = "Hello"
»   b = "World"

Esto se verá como un código Haskell válido si el editor muestra pestañas alineadas en múltiplos de cuatro. Pero no lo es. Las pestañas de Haskell están alineadas en múltiplos de ocho, por lo que el código se interpretará así:

example = (a, b)
··where
····a = "Hello"
»       b = "World"

En segundo lugar, si usa sólo pestañas, puede terminar con un diseño que no se ve bien. Por ejemplo, el siguiente código parece correcto si se muestra una pestaña con seis o más espacios (ocho en este caso):

example = (a, b)
»       where»  a = "Hello"
»       »       b = "World"

Pero en otro editor que use 4 espacios ya no se verá bien:

example = (a, b)
»   where»  a = "Hello"
»   »   b = "World"

Aunque sigue siendo correcto. Sin embargo, alguien que esté acostumbrado a los espacios podría volver a sangrar b' vinculando espacios y terminar con un error del analizador.

Si aplica una convención de código en todo su código que asegure que solo use tabulaciones al comienzo de una línea y use una nueva línea después where, letpuede doevitar algunos de los problemas (consulte 11 ). Sin embargo, las versiones actuales de GHC advierten sobre las pestañas de forma predeterminada , porque han sido una fuente de muchos errores del analizador en el pasado, por lo que probablemente también quieras deshacerte de ellas.

Ver también

  • Un hilo de Reddit sobre el tema (la mayoría espacios profesionales, pero algunas pestañas profesionales)
  • Buen estilo Haskell (espacios profesionales)
  • Otro debate más entre Tabs y Space (mezcla profesional)
Zeta avatar Mar 07 '2016 22:03 Zeta