Convención de codificación en C# (Alumnos) Ulman 2013 1. Convenciones de escritura para proyectos en .NET / C#. Estilos de Letras Capitales Definimos tres tipos de escritura de identificadores o palabras. Pascal Case La primera letra en la identificación y la primera letra de cada palabra concatenada subsiguiente se pone en mayúsculas. Ejemplo: BackColor, DataSet Camel Case La primera letra en la identificación es minúscula y la primera letra de cada palabra concatenada subsiguiente se pone en mayúsculas. Ejemplo: numeroDeDias, esValido Upper Case Todas las letras en el identificador deben ser en mayúsculas Use esta convención sólo en los identificadores que consisten en dos o menos letras. Ejemplo: ID, PI Notación Húngara La notación húngara es una convención de identificación de las variables en un programa de computación. Esta especificación indica que cada variable debe ir precedida por un indicador de 1 o más letras que especifican el tipo de variable. Ejemplo: string int double strNombre; intCantidad; dblPrecioTotal; Tipo de Dato int long byte float double bool char string DateTime Prefijo Ejemplo int lng byt flt dbl bln chr str dtm intCantidad lngIndice bytData fltTotalAnual dblTotal blnExiste chrLetra strNombre dtmFechaDeNacimiento Tabla de Tipos de Datos de C# y su prefijo para la Notación Húngara. 2. Convenciones de Nombramiento Variables Privadas (Fields en C#) Se debe utilizar Camel Case. Se debe identificar a la variable con la Notación Húngara. Se debe identificar con el Prefijo "_". Ejemplo: public class Cliente { string _strNombre; // Por ser privadas de la clase(Fields) tiene "_". /// <summary> /// Propiedad Public Nombre /// </summary> public string Nombre { get {return _strNombre;} set {_strNombre = value;} } } v 2.0.2 1 de 6 Convención de codificación en C# (Alumnos) Ulman 2013 Variables Locales Se debe utilizar Camel Case. Se debe identificar a la variable con la Notación Húngara Ejemplo: public override string ToString() { string strReturnValue = ""; strReturnValue += "Este es un String... \n"; return strReturnValue; } Namespaces La regla general para el nombramiento de espacios de Nombres consiste en utilizar la compañía seguida de la Tecnología empleada. Opcionalmente se puede indicar la característica y diseño. using CompanyName.TechnologyName[.Feature][.Design]; Ejemplo: using ORT.Buggy; using ORT.Buggy.Windows; using ORT.Buggy.SerialPort; Clases Se debe utilizar un sustantivo para nombrar una clase. Se debe utilizar Pascal Case. No se debe utilizar ningún tipo de prefijo para denominar la clase como C o T. No se debe utilizar el caracter (_). Ejemplo: public public public public public class class class class class Cuadrado {} Pantalla {} Cliente {} ClienteVIP {} Factura {} Parámetros Se deben utilizar nombres descriptivos para los nombres de los parámetros. Se debe utilizar Camel Case. Se debe identificar a los parámetros con la Notación Húngara Ejemplo: public bool Existe(int intCodigo, bool blnExtended) {} public Cliente GetByCodigo(int intCodigo, bool blnExtended) {} Métodos Se deben utilizar verbos o frases con verbos para identificar a los métodos. Se debe utilizar Pascal Case. Ejemplo: public public public public void RemoveAll(); bool Insertar(); char GetCharAt(); Factura GetUltimaFactura(); Enumeraciones Se debe utilizar Pascal Case. No se debe utilizar la notación Húngara. Se debe utilizar el sufijo “Enum” en las enumeraciones. Evite cambiar el tipo de dato de la enumeración. Por default es int Ejemplo: public enum ClientesEnum { Codigo, Nombre, Orden , Activo }; v 2.0.2 2 de 6 Convención de codificación en C# (Alumnos) Ulman 2013 Propiedades Se debe utilizar Pascal Case. No se debe utilizar la notación Húngara. Ejemplo: public class Cliente { int _intCodigo; string _strRazonSocial; // Por ser privadas de la clase(Fields) tiene "_". // Por ser privadas de la clase(Fields) tiene "_". public int Codigo { get {return _intCodigo;} set {_intCodigo = value;} } public string RazonSocial { get {return _strRazonSocial;} set {_strRazonSocial = value;} } } Excepciones Los Manejdores de Eventos en .NET tienden a utilizar “e” como parametro en la invocacion al evento. Para asegurarnos de que no exista conflicto alguno con este parametro, utilizaremos “ex” como la variable estandar del tipo Exception. Ejemplo: private void Page_Load(object sender, System.EventArgs e){ ... try{ ... }catch(Exception ex){ MessageBox.Show(ex.Message) } } 3. Notación de los controles Visuales: Esta notación debe respetarse tanto para los controles Windows y Web. Control Button Calendar Checkbox CheckBoxList ComboBox DataGrid DataList DateTimePicker Dialog, ColorDialog, FontDialog Image Label LinkLabel ListBox ListView MainMenu MenuItem Panel PictureBox RadioButton RadioButtonList RichTextBox Repeater TabControl TextBox TreeView ToolBar Timer Validators (Todos) ValidationSummary v 2.0.2 Prefijo btn cal chk chkl cbo dtg dlst dtp dlg img lbl lbl lst lvw mnu mnu pnl pic rad rbl rtb rep tab txt tvw tbr tmr val vals Ejemplo btnSave calMyDate chkMailList chklAddress cboProvincias dtgClientes dlstProductos dtpFechaInicio dlgFileSave, dlgColores imgLogo lblApellido lblWebPage lstCompany lvwRecibos mnuArchivo mnuCerrar panSection picLogo radSex rblAgeGroup rtbDocumento repSection tabUsuario txtApellido tvwDirectorios tbrStatus tmrSegundos valCreditCardNumber valsErrors 3 de 6 Convención de codificación en C# (Alumnos) Ulman 2013 4. Guía de estilo de Codificación Tabs e Indentado El código debe ser indentado presionando la tecla Tab. Utilización de las Llaves Las Llaves deben comenzar siempre en la misma línea de la instrucción. El contenido de las llaves debe estar indentado con 1 (un) Tab. Ejemplo: if (unaExpresion){ HacerAlgo (); }else{ HacerOtraCosa (); } Las sentencias “case” deben estar indentadas según el siguiente ejemplo. Ejemplo: switch (unaExpresion) { case 0:{ HacerAlgo(); break; } case 1:{ HacerOtraCosa(); break; } case 2:{ int n = 1; HacerAlgoMas(n); break; } } Las llaves nunca deben considerarse opcionales, se deben utilizar aunque exista una sola instrucción. De esta nabera se incrementa la legibilidad del código y su mantenimiento. Ejemplo: for (int i=0; i < 100; i++) { HacerAlgo (i); } Instrucciones de una sola línea Las instrucciones de una sola línea pueden tener llaves en la misma línea, como comienzo y fin de la instrucción. public class Persona { int _strNombre; // Por ser privadas de la clase (Fields) tiene "_". public int Nombre{ get {return _strNombre;} set {_strNombre = value;} } } Se debe considerar como obligatorio la utilización de llaves en todas las estructuras de control (if, while, for, etc.), aunque contengan una sola sentencia. v 2.0.2 4 de 6 Convención de codificación en C# (Alumnos) Ulman 2013 5. Comentado del Código Los comentarios deben ser utilizados para describir la intención, algorítmica y funcionamiento o lógica. Seria ideal si alguien diferente del el autor del comentario, pudiese comprender el comportamiento del método, solamente leyendo el comentario del código. Notificación de Derechos (Copyright Notice) Cada Archivo debe comenzar con un aviso legal (copyright notice). Ejemplo: //------------------------------------------------------------------// <copyright file="Buggy.cs" company="ORT Agentina"> // Copyright (c) ORT Agentina. All rights reserved. // </copyright> //------------------------------------------------------------------Comentarios en la Documentación Todos los métodos deben utilizar el formato XML para la documentación. Existen herramientas tanto en Visual Studio, como de terceras partes para generar la documentación automática a partir de Tags XML. Para generar el encabezado standard de la documentación simplemente debemos posicionarnos en la línea previa al comienzo del método, y presionar 3 veces el caracter “/”. (///) Ejemplo: /// <summary> /// Incrementar los Vuelos del Usuario, y actualizar su nombre. /// </summary> /// <param name="intUsuario">Codigo de Usuario</param> /// <param name="strNombre">Nuevo nombre del Usuario.</param> /// <returns>Retorna true en caso de que la cantidad ...</returns> public bool Incrementar(int intUsuario, string strNombre) { bool blnReturnValue = false; // Cuerpo del Metodo // ... return blnReturnValue; } Estilos de Comentado La utilización del comentado utilizando las 2 barras //, deben utilizarse en varias situaciones. Siempre que sea posible, inserte los comentarios sobre el Codigo y no por debajo. Ejemplo: // Se requiere para la utilización a traves del Proxy. GlobalProxySelection.Select = new WebProxy("http://www.polshu.com.ar"); // Creación de un objeto para acceder a los recursos de Internet WebClient myClient = new WebClient(); Los comentarios deben insertarse al final de la línea, cuando el espacio lo permita. public class AlgoUtil { private int private static bool } v 2.0.2 _intItemHash; _blnYaSeRealizo; // miembro de instancia // miembro estático 5 de 6 Convención de codificación en C# (Alumnos) Ulman 2013 Espaciado Los espacios incrementan la legibilidad, y decrementan la densidad del código. A continuación se describen algunas reglas a cumplir Ejemplo: Utilice un espacio luego de una coma, entre los argumentos de una invocación a un método. Console.In.Read(myChar, 0, 1); Correcto: Console.In.Read(myChar,0,1); Incorrecto: No utilice un espacio después del paréntesis y el primer argumento de un método. CreateFoo(myChar, 0, 1) Correcto: CreateFoo( myChar, 0, 1 ) Incorrecto: No utilice espacios entre el nombre de un método y los paréntesis. CreateFoo() Correcto: CreateFoo () Incorrecto: No utilice espacios dentro de los corchetes. Correcto: Incorrecto: x = dataArray[index]; x = dataArray[ index ]; Utilice un espacio antes de las expresiones a evaluar, en las sentencias de control. while (x == y) Correcto: while(x==y) Incorrecto: Utilice un espacio antes y después de los operadores de comparación. if (x == y) Correcto: if (x==y) Incorrecto: v 2.0.2 6 de 6