2012-03-11 10 views
9

He aceptado de muchos otros idiomas que los caracteres de subrayado tienen tanta libertad como los alfabetos en un identificador. De ahí _v y v_. Además, los guiones bajos posteriores son , se recomienda para evitar la ambigüedad con las palabras clave reservadas (class_, case_).Guía de estilo Scala para subrayado en los identificadores

val abc_=0 
<console>:1: error: '=' expected but integer literal found. 
     val abc_=0 

Destaca siendo una parte importante del sistema de tipificación Scala, lo que es la forma recomendada para los utilizan en los identificadores, de manera que analizador y humano pueden tanto ser feliz? ¿Cuáles son todas las posibles ambigüedades que los identificadores con guiones bajos traen?

Los espacios en blanco iniciales parecen aumentar la confusión _class en lugar de class_.


preguntas relacionadas:

+2

Consulte la [guía de estilo] (http://docs.scala-lang.org/style/naming-conventions.html). – agilesteel

+4

Nunca he visto la cosa 'class_'. Por lo general, veo errores ortográficos creativos (por ejemplo, 'clazz'), o bien, Scala te permite usar palabras clave como identificadores si los rodeas con palos de retroceso. –

+0

@SethTisue, lo obtuve de la guía de estilo PEP8 de Python. Mi error; pensando que era un estándar. – aitchnyu

Respuesta

15

subrayado que se arrastran son una mala idea porque cosas como x_+ son nombres de variables válidos por sí mismos. No use los caracteres de subrayado finales en absoluto.

Los caracteres de subrayado iniciales no son una mala idea, pero todavía es difícil analizar visualmente cosas como _myfunc _. Existe una convención para hacer que los miembros privados que tienen argumentos de constructor del mismo nombre comiencen con _: class X(x: Int) { private var _x = x }. Mi recomendación es no lo hagas. Estás pidiendo confusión. Use myX o theX o xLocal o xi o algo para su variable interna. Aún así, si hace vaya con _x, tendrá buena compañía; la gente tenderá a saber a qué te refieres.

Los subrayados dentro de un nombre no son ampliamente utilizados, ya que el caso camel es el estándar. La excepción que hago es que uso guiones bajos dentro de defs implícitos que no se espera que sean usados ​​a mano, y en su lugar indique por qué está ocurriendo la conversión: tuple2_can_expand podría agregar un método expand para convertir un Tuple2 en un Tuple3, por ejemplo.

6

Hay un solo lugar donde necesita caracteres de subrayado en los identificadores: entre caracteres alfanuméricos y otros. De hecho, eso es justo lo que sucede en su caso: el analizador cree que está declarando val abc_= y no tiene = después de eso. La mayoría de uso común es para los métodos "setter":

def prop: String // or some other type 
def prop_=(v: String) 

También he visto predicate_? en lugar de más similar a Java isPredicate.

keyword_ no se usan con frecuencia, pero si los usa, no escatime en los espacios en blanco. Escriba, por ejemplo, val abc_ = 0. Pero para el caso, val abc = 0 es más legible que val abc=0 también, por lo que debe tener espacio en blanco allí de todos modos. Como dice Rex Kerr, _privateVariable es aceptable, pero no es una práctica recomendada.

+1

¿Sabes por qué "predicate_?" y no "predicado"? Sólo curioso. –

+2

@EdStaub Principalmente para que pueda escribir cosas como 'x + y' o' x = y' y no tenga el analizador sintiendo que es un identificador único, creo. –

Cuestiones relacionadas