Mucha muestra del código de Scala contiene cadenas y colecciones llamadas "xs". ¿Por qué xs?¿Por qué los identificadores List y String se llaman "xs" (en Scala y en otros idiomas)?
Ejemplos:
var xs = List(1,2,3)
val xs = "abc"
Mucha muestra del código de Scala contiene cadenas y colecciones llamadas "xs". ¿Por qué xs?¿Por qué los identificadores List y String se llaman "xs" (en Scala y en otros idiomas)?
Ejemplos:
var xs = List(1,2,3)
val xs = "abc"
Básicamente es una convención de nombres que se originó en LISP. El razonamiento detrás de esto es que:
Pensé que era xii;) –
@Paul - no, eso funciona solo cuando tienes exactamente 12 x –
que he visto este nombre usado para variables de lista de tutoriales de programación funcional, pero no strings (excepto cuando una cadena se considera una lista de caracteres).
Es básicamente un nombre ficticio utilizado en los ejemplos. Puede nombrar una variable escalar x
, mientras que una lista sería xs
, ya que xs
es el plural de x
. En el código de producción, es mejor tener un nombre más descriptivo.
También puede ver esto en el código que patrón coincide con las listas. Por ejemplo (en OCaml):
let rec len l =
match l with
| [] -> 0
| x :: xs -> 1 + len xs
Un par más descriptivo de nombres podría ser first :: rest
, pero esto es sólo un ejemplo.
Tiendo a usar la misma convención en producción, por ejemplo "orden" y "pedidos";) – bbozo
Aparte del hecho de que xs
está destinado a ser un plural de x como @Ken Bloom señala, también es importante observar cómo las lenguas como la estructura Scala List
. List
se estructura como una lista vinculada, en la que el contenedor tiene una referencia al primer elemento y al resto de la lista.
El ::
operador (llamada cons) construye la lista como:
42 :: 69 :: 613 :: Nil
El ::
cuando aparecen en la coincidencia de patrones extrae también una lista en el primer artículo y el resto de la lista como sigue:
List(42, 69, 613) match {
case x :: xs => x
case Nil => 0
}
Dado que este patrón aparece en todas partes, Aders puede inferir que xs
implica "el resto de la lista".
Menciono mentalmente el "x" como "exceso", como en "el resto". – nibot
Relacionados (pero probablemente no un duplicado) http://stackoverflow.com/questions/1564758/does-functional-programming-mandate-new-naming-conventions –