viernes, 22 de octubre de 2010

If Contemplado

[CodingHorror]


 1 if (module.FechaDesde > DateTime.Now && module.habilitado) 
 2 {
 3  //Se contempla esta validacion
 4 }

Microsoft Visual C# Default Keybindings

Indispensable Poster con los atajos de teclado para C#.

Valores default en C#

A continuación se muestra la tabla con los valores por default.

Tipo de valorValor predeterminado
boolfalse
byte0
char'\0'
decimal0,0M
double0,0D
enumEl valor producido por la expresión (E)0, donde E es el identificador de la enumeración.
float0,0F
int0
long0L
sbyte0
short0
structEl valor obtenido al asignar los valores predeterminados a los campos de tipo de valor y el valor null a los campos de tipo de referencia.
uint0
ulong0
ushort0

Code Review

Imagen ilustrativa de un verdadero Code Review.


Microsoft .NET Framework 3.5 - Commonly Used Types and Namespaces

Siguiendo con la colección de los Posters, dejo el del .NET Framework 3.5.




SQL Joins

Imagen que ilustra las diferentes formas que hay para hacer un JOIN con una Tabla.
Ideal para tenerlo pegado en la pared o en alguna parte en tu box de trabajo.

lunes, 18 de octubre de 2010

Scrum Development Process

Poster donde se ven las distintas etapas de SCRUM.

jueves, 14 de octubre de 2010

Dilbert, 10 de Octubre

Dilbert.com

DevFest 2010 Argentina

Evento para la comunidad de desarrolladores el 1 y 2 de Noviembre.







width manual

[CodingHorror]
 1 <table style="border-color: Gray; border: 1;">
 2         <tr>
 3             <td>
 4                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 5                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 6             </td>
 7             <td>
 8                 <asp:Label ID="lblContacto" runat="server" Text="Contacto:" />
 9             </td>
10             <td>
11                 <c1:TextBox ID="txtContactoText" runat="server" CausesValidation="false"
12                     Width="300"></c1:TextBox>
13             </td>
14             <td>
15                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
16             </td>

sábado, 2 de octubre de 2010

Castear a null un dato null

[CodingHorror]

objeto.Fecha = contract.Fecha.HasValue ? contract.Fecha.Value : (DateTime?)null;

objeto.Fecha es del tipo (DateTime?)

Code Snippets en Visual Studio

Algo que incorporó Visual Studio hace ya un largo tiempo son los fabulosos Code Snippets (porción de código), la idea es bastante sencilla y nos permite ganar una gran productividad a la hora de programar.

Muchas veces cuando programamos tenemos que escribir el mismo código una y otra vez, por ejemplo cuando hacemos los Try Catch, o ese típico código que copiamos siempre de un ABM a otro y solo cambia el nombre de alguna variable. El Visual Studio nos ayuda con esto, y lo hace con los Code Snippets, basta con hacer uno o dos clicks y nos agrega una gran porción de código listo para usarse.
Esto nos da la ventaja de ahorrarnos el tiempo de tener que tipear lo mismo repetidas veces.
Por defecto, ya vienen cargados unos cuantos Code Snippets y probablemente algunos los estén usando sin darse cuenta, ya que el Intellisense del Visual Studio nos muestra cuales son los Code Snippets que tenemos cargados.

Imagen 1 (Code Snippet en el Intellisense del Visual Studio)

Como se ve en la imagen 1, el Visual Studio nos muestra los Code Snippets con el icono , ese mismo nos va a generar todo el bloque de código para el Try Catch. (Apretando dos veces tab cuando aparezca el Intellisense)

Pero la ventaja de los Code Snippets frente a un simple Copy/Paste es que además de que nos agrega la porción de código, nos deja el cursor para modificar alguna parte específica del mismo.
Por ejemplo si agregamos el Code Snippet del “IF”, nos pone el cursor para modificar la condición:


Imagen 2 (podemos modificar lo que aparece resaltado, y asi poner la condición que necesitemos)

Otra forma para agregar Code Snippets es presionando botón derecho e ir a la opción “Insert Snippet”, como se puede ver a continuación:


Imagen 3


Imagen 4

También tenemos la opción de “Surround With”, es similar a la anterior, con el detalle que podemos seleccionar el código que queramos, aplicarle un “Surround With” y el mismo va a ir dentro del Code Snippet que elijamos.


Imagen 5 (el MessageBox está dentro del Code Snippet “IF”)

Como pueden ver el Visual Studio nos ofrece una gran cantidad de Code Snippets, pero también agregar cuantos snippets deseen. En internet pueden encontrar muchísimos dando vueltas, incluso se los puede crear a gusto propio.


Null Coalescing Operator

Muchos no conocen este feature de C#, es bastante sencillo, lo que hace es fijarse si el valor de la izquierda es nulo, en caso de que sea asi retorna lo que se le indique a la derecha, caso contrario va a retornar el valor de la variable.

 1 string texto = "hello world"
2 string resultado = texto ?? "Este valor es nulo"
3
4 // Devuelve "hello world"
5
6 string texto = null;
7 string resultado = texto ?? "Este valor es nulo"
8
9 // Devuelve "Este valor es nulo"

Precedencia de Operadores

La precedencia de operadores especifica como se agrupan las expresiones.

Por ejemplo en la siguiente sentencia:

int numero = 2 + 3 * 4;

El resultado es 14 y no 20. Significa que la multiplicación tiene mayor precedencia que la suma, primero se realiza 3 * 4 y al resultado de eso se le suma 2.
Esto se puede alterar incluyendo los paréntesis:

int numero2 = (2 + 3) + 4;

El resultado en este caso, es 20.

Cuando realizamos una condición también existen precedencias, detallo a continuación la lista de los operadores agrupados por orden de prioridad de mayor a menor, los operadores dentro de cada grupo tienen la misma prioridad.



Categorías

Operadores

Principal

x.y

f(x)

a[x]

x++

x--

new

typeof

checked

unchecked

->


Unario

+

-

!

~

++x

--x

(T)x


true


false


&


sizeof


Multiplicativo

*
/

%

Sumatorio

+


-


Desplazamiento

<<


>>


Comprobación de tipos y relaciones

< >

<=

>=

is

as

Igualdad

==

!=

AND lógico

&

XOR lógico

^

OR lógico

|

AND condicional

&&

OR condicional

||

Condicional

?:

Asignación

=

+=

-=

*=

/=

%=

&=

|=

^=

<<=

>>=

Uso combinado de Null

??

Lambda

=>

Por lo cual el siguiente condición daría TRUE:
bool verdadero1 = true;
bool verdadero2 = true;
bool falso = false;

if (falso && verdadero1 || verdadero2)
MessageBox.Show("true");
else
MessageBox.Show("false");

Primero evalúa falso y verdadero1 (false) y luego verdadero2.

Monster If

[CodingHorror]
 1 if (!(
2 (_idCaracteristica == _hora.Asignaciones.Especialidad.IdEspecialidad) &&
3 (_idOrigen == _hora.Asignaciones.Origen.IdOrigen) &&
4 (_fechaDesde.ToShortDateString() == _hora.FechaAltaResolucion.ToShortDateString()) &&
5 (
6 (
7 (_fechaHasta == null && _hora.FechaResolucion == null)
8 )
9 ||
10 (
11 (_fechaHasta.HasValue && _hora.FechaBajaResolucion.HasValue) &&
12 (_fechaHasta.Value.ToShortDateString() == _hora.FechaBajaResolucion.Value.ToShortDateString())
13 )
14 ) &&
15 (_hDesde == _hora.DiaAtencion.HorarioDesde) &&
16 (_hHasta == _hora.DiaAtencion.HorarioHasta)
17 )
18 )

Formatear Código en Blogger

Luego de varias horas luchando para encontrar una herramienta que me permita colorear el código C# en las entradas de mi Blog, sin mucho éxito al principio, pude encontrar la forma de hacerlo.
Se puede lograr usando el programa Highlight Code Converter, les dejo un link donde detalla paso a paso como realizar el formateo (tiene imágenes y todo, excelente trabajo)

Comparar Fechas y Horas

En esta sección voy a ir subiendo en entradas diferentes porciones de código un tanto alarmantes.


 1 return (_programa.Fecha.Date >= horario.FechaDesde.Date &&
 2 _programa.Fecha.Date <= (horario.FechaHasta.HasValue ? horario.FechaHasta.Value.Date : _programa.Fecha.Date) &&
 3 int.Parse(_programa.HoraTurno.Substring(0, 2)) * 100 + int.Parse(_programa.HoraTurno.Substring(3)) >=
 4 int.Parse(horario.HoraDesde.Substring(0, 2)) * 100 + int.Parse(horario.HoraDesde.Substring(3)) &&
 5 int.Parse(_programa.HoraTurno.Substring(0, 2)) * 100 + int.Parse(_programa.HoraTurno.Substring(3)) <=
 6 int.Parse(horario.HoraHasta.Substring(0, 2)) * 100 + int.Parse(horario.HoraHasta.Substring(3)));