tengo el siguiente fragmento de código:¿Debo evitar cadenas mágicas como sea posible?
internal static string GetNetBiosDomainFromMember(string memberName)
{
int indexOf = memberName.IndexOf("DC=", StringComparison.InvariantCultureIgnoreCase);
indexOf += "DC=".Length;
string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf);
if (domaninName.Contains(","))
{
domaninName = domaninName.Split(new[] { "," }, StringSplitOptions.None)[0];
}
return domaninName;
}
estoy haciendo algunas parsings para la EA, así que tengo algunas cadenas como "DC =", "objectCategory =", "LDAP: //",", ",". " tal y tal He encontrado el código más legible que el código de abajo: (. Puede encontrado el opuesto, dejo' me sé)
private const string DcString = "DC=";
private const string Comma = ",";
internal static string GetNetBiosDomainFromMember(string memberName)
{
int indexOf = memberName.IndexOf(DcString, StringComparison.InvariantCultureIgnoreCase);
indexOf += DcString.Length;
string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf);
if (domaninName.Contains(CommaString))
{
domaninName = domaninName.Split(new[] { CommaString }, StringSplitOptions.None)[0];
}
return domaninName;
}
Incluso yo puede tener 'CC' y 'DC =', que debería pensar en los nombres de estas variables o dividir estos en dos :(Entonces mi pregunta:. debo evitar cuerdas mágicas posible
ACTUALIZADO
Algunas conclusiones:?.
- Hay formas de evitar el uso de cadenas, lo que podría ser mejor. Para lograrlo se podría utilizar: clases estáticas, enumeradores, constantes numéricas, contenedores de COI e incluso reflexión.
- Una cadena constante te ayuda a asegurarte de que no tienes errores tipográficos (en todas las referencias a una cadena).
- Las cadenas constantes para la puntuación no tienen ninguna semántica global. Sería más legible utilizar estos ya que son ",". Usar una constante para este caso se puede considerar si esa constante puede cambiar en el futuro, como cambiar "," por "." (Tener una constante puede ayudarlo en esa refactorización aunque las herramientas modernas como reafilador lo hacen sin necesidad de una constante o variable).
- Si solo lo utiliza cadena una vez que no necesita convertirlo en una constante. Sin embargo, considere que una constante puede documentarse y aparecer en la documentación (como Javadocs). Esto puede ser importante para valores de cadena no triviales.
Creo que le puede interesar el tema [this] (http://programmers.stackexchange.com/questions/142278/are-nullable-types-preferable-to-magic-numbers). – Torv
Creo que apuntas la respuesta desde MainMa, ¿verdad? –
Sí, tienes razón. Oh fundo [otro tema interesante] (http://programmers.stackexchange.com/questions/145738/should-a-string-constant-be-defined-if-its-only-going-to-be-used-once) para ti. estos temas no responden a la pregunta pero son interesantes =) – Torv