studio - notacion hungara para c#
¿C#convención de nomenclatura para constantes? (9)
De hecho, tiendo a preferir PascalCase aquí, pero por costumbre, soy culpable de UPPER_CASE ...
private const int THE_ANSWER = 42;
o
private const int theAnswer = 42;
Personalmente creo que con los IDE modernos deberíamos ir con camelCase ya que ALL_CAPS parece extraño. ¿Qué piensas?
Deja el húngaro a los húngaros.
En el ejemplo, incluso dejé de lado el artículo definitivo y simplemente voy con
private const int Answer = 42;
¿Es esa respuesta o es esa la respuesta?
* Hecho editado como Pascal estrictamente correcto, sin embargo, estaba pensando que la pregunta estaba buscando más una respuesta a la vida, el universo y todo .
El ALL_CAPS está tomado de la forma de trabajar de C y C ++, creo. Este artículo here explica cómo surgieron las diferencias de estilo.
En los nuevos IDE, como Visual Studio, es fácil identificar los tipos, el alcance y si son constantes, por lo que no es estrictamente necesario.
El software FxCop y Microsoft StyleCop lo ayudarán a darle pautas y verificar su código para que todos StyleCop la misma manera.
En realidad es
private const int TheAnswer = 42;
Al menos, si observa la biblioteca .NET, la IMO es la mejor manera de decidir las convenciones de denominación, por lo que su código no parece fuera de lugar.
En su artículo Constantes (Guía de programación de C #) , Microsoft da el siguiente ejemplo:
class Calendar3
{
const int months = 12;
const int weeks = 52;
const int days = 365;
const double daysPerWeek = (double) days / (double) weeks;
const double daysPerMonth = (double) days / (double) months;
}
Entonces, para las constantes, parece que Microsoft recomienda el uso de camelCasing
. Pero tenga en cuenta que estas constantes se definen localmente .
Podría decirse que el nombramiento de constantes visibles externamente es de mayor interés. En la práctica, Microsoft documenta sus constantes públicas en la biblioteca de clases .NET como campos . Aquí hay unos ejemplos:
- Int32.MaxValue
- String.Empty (en realidad,
static readonly
) - Math.PI
- Math.E
Los dos primeros son ejemplos de camelCasing . El tercero parece seguir las camelCasing de Microsoft para un acrónimo de dos letras (aunque pi no es un acryonym). Y el cuarto parece sugerir que la regla para un acrónimo de dos letras se extiende a un acrónimo o identificador de una sola letra como E
(que representa la constante matemática e ).
Además, en su documento de Convenciones de Capitalización, Microsoft declara muy directamente que los identificadores de campo deben nombrarse a través de PascalCasing
y brinda los siguientes ejemplos para MessageQueue.InfiniteTimeout y UInt32.Min :
public class MessageQueue
{
public static readonly TimeSpan InfiniteTimeout;
}
public struct UInt32
{
public const Min = 0;
}
Conclusión: use PascalCasing
para constantes públicas (que se documentan como const
o campos de static readonly
).
Por último, que yo sepa, Microsoft no aboga por convenciones de nomenclatura o uso de mayúsculas específicas para identificadores privados como se muestra en los ejemplos presentados en la pregunta.
La convención de nomenclatura y uso de mayúsculas recomendada es usar la carcasa de Pascal para constantes (Microsoft tiene una herramienta llamada StyleCop que documenta todas las convenciones preferidas y puede verificar el cumplimiento de la fuente, aunque es un poco demasiado analógicamente para los gustos de muchas personas). p.ej
private const int TheAnswer = 42;
La convención de capitalización de Pascal también está documentada en las pautas de diseño de marcos de Microsoft.
Primero, la notación húngara es la práctica de usar un prefijo para mostrar el tipo de datos de un parámetro o el uso previsto. Las convenciones de nomenclatura de Microsoft para dice no a la notación húngara http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx
No se recomienda el uso de MAYÚSCULAS como se indica aquí: Pascal Case es la convención aceptable y CAPACIDADES DE SENSIBILIDAD. http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming
Microsoft también afirma aquí que se puede utilizar MAYÚSCULAS si se hace para que coincida con el esquema existente. http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx
Esto lo resume bastante bien.
Sigo con mayúsculas para los valores const, pero esto es más por costumbre que por alguna razón en particular.
Por supuesto, hace que sea fácil ver de inmediato que algo es una constante. La pregunta para mí es: ¿Realmente necesitamos esta información? ¿Nos ayuda de alguna manera a evitar errores? Si le asigno un valor a la constante, el compilador me dirá que hice algo estúpido.
Mi conclusión: ir con la carcasa de camello. Tal vez yo también cambie mi estilo ;-)
Editar:
Que algo huela a húngaro no es realmente un argumento válido, OMI. La pregunta siempre debe ser: ¿Ayuda o duele?
Hay casos en que el húngaro ayuda. No muchos hoy en día, pero todavía existen.
Visualmente, mayúsculas es el camino a seguir. Es tan reconocible de esa manera. En aras de la singularidad y de no dejar ninguna posibilidad de adivinar, ¡voto por UPPER_CASE!
const int THE_ANSWER = 42;
Nota : La mayúscula será útil cuando se usen constantes dentro del mismo archivo en la parte superior de la página y con propósitos intelectuales; sin embargo, si se cambiaran a una clase independiente, el uso de mayúsculas no haría mucha diferencia, como ejemplo:
public static class Constant
{
public static readonly int Cons1 = 1;
public static readonly int coNs2 = 2;
public static readonly int cOns3 = 3;
public static readonly int CONS4 = 4;
}
// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
}