Sie sind auf Seite 1von 8

Boas prticas em C#

Na maioria das discusses que participei acerca do


assunto boas prticas ou qualidade em escrita de cdigo
fonte, percebi que se no interrompssemos as manifestaes
mais inflamadas o resultado continuaria muito distante de um
consenso. Em outras palavras, cada um tem uma posio muito
individual sobre a questo.
Realmente o assunto polmico na essncia, pois o que
qualidade para voc?
Na inteno de apresentar minhas posies pessoais,
escrevo nas linhas seguintes alguns dos conceitos que a prtica
de 16 anos de programao consolidaram em minha forma de
escrever cdigo fonte.

Endentao
A primeira questo sobre o assunto endentao que
podemos citar sobre o nmero de espaos entre os nveis. Por
exemplo, o Visual Studio.NET 2003 sugere como default 4
espaos conforme podemos comprovar na imagem abaixo.

Na poca que os monitores e as placas de vdeo no eram


to poderosos, eu particularmente gostava de utilizar dois

espaos para a endentao. No final dos anos 90 eu j tinha


aderido a 3 espaos e esta a minha opinio at hoje.
A prxima questo pode ser o tamanho mximo de uma
linha de cdigo fonte. Neste quesito defendo que se deve evitar
ao mximo escrever linhas com mais de 80 posies entre
espaos e caracteres. A idia facilitar a compreenso do
cdigo e se possvel visualizar a linha inteira em seu editor de
cdigo.
Alguns trechos de cdigo podem ficar muito extensos e
voc dever encarar o dilema de quebrar a linha. Eu
naturalmente no gosto de quebrar linhas de cdigo, entretanto
em situaes necessrias aplico os seguintes princpios:

Quebrar a linha aps uma vrgula;

Quebrar a linha aps um operador;

Alinhar a nova linha no inicio da expresso no


mesmo nvel da linha anterior.

Exemplos:
longMethodCall(expr1, expr2, expr3,
expr4, expr5);

e
var = a * b / (c - g + f) +
4 * z;

Outra premissa importante a utilizao de espaos em


branco para endentao. Seja qual for sua opinio sobre esta
questo, exponho a minha mais veementemente: _ No use
espaos em branco para endentao, use tabulao!
Motivos: Dos trilhes de motivos existentes, destaco a
facilidade de incrementar e decrementar blocos de cdigo
atravs de atalhos de teclas do editor de cdigo.

Comentrios
Das muitas funcionalidades fascinantes do Visual
Studio.NET, a de transformar comentrios em documentao de
cdigo realmente impressionante. Em face disso, se voc tem
esta necessidade, utilize as trs barras /// e seja feliz.
Entretanto, para comentrios que no necessitam serem
publicados, quero apresentar algumas sugestes.
Baseado na preocupao que muito provavelmente o
comentrio importante para voc ou outra pessoa ser
orientada sobre a manuteno de um cdigo fonte, chamo a

ateno forma de destacar o comentrio. Por exemplo,


comentrios com mais de uma linha poderiam ser assim:
/* Line 1
Line 2
Line 3 */

Porm conforme os critrios que destaquei, sugiro que


seja desta forma:
/* Line 1
* Line 2
* Line 3
*/

Fundamentalmente a questo visual.


Para comentrios de uma linha somente, tenho a seguinte
opinio. Ou o comentrio deve uma espcie de marcador de
loops ou no deve ser aplicado. A questo que como exposto
em linhas anteriores, os comentrios devem chamar a ateno
visando facilitar e direcionar a manuteno. Somente justifica-se
um comentrio de uma linha quando voc necessita marcar
dentro de um bloco de cdigo o incio de um nvel de
endentao ou loop. Exemplo:
//Verifica se somente uma string foi entrada
if(args.Length==1)
Console.WriteLine(args[0]);
else
{
ArgumentOutOfRangeException ex;
ex = new ArgumentOutOfRangeException("Utilize somente uma string");
throw(ex);
}

No exemplo acima utilizamos o comentrio de uma linha


com duas barras // para explicar um bloco de cdigo e marcar
o seu nvel de endentao. Do trecho aonde este cdigo exemplo
foi retirado existiam outras linhas de cdigo antes e depois do
bloco if / else.
Outra boa aplicao para comentrios de uma linha a
explicao de uma declarao. Por exemplo:
int levelStatus; // nvel do status
int sizeStatus; // tamanho do status

Declaraes
Sendo oportunista, declarar variveis tambm deve
apresentar uma preocupao com a visibilidade. Por exemplo,
eu no aconselho a seguinte declarao:
int a, b;

Pode parecer exagero mas quando outro desenvolvedor


for manusear seu cdigo fonte vai apreciar se encontrar a
mesma declarao da seguinte forma:
int a; // Valor de entrada 1
int b; // Valor de entrada 2

Para ser mais sincero e apresentar mais um conceito,


tente sempre inicializar suas variveis no local aonde so
declaradas. Sabemos que nem sempre isto possvel, contudo
bastante recomendvel. Exemplo:
int a = 1; Valor de entrada 1

Permita-me um comentrio adicional, no estou


aconselhando nomear uma varivel inteira com a, os exemplos
anteriores visam explanar outras questes.

Nomear Variveis
Sobre este tpico, aps muitas demoradas discusses com
meu amigo Mauro SantAnna, concordamos sobre os seguintes
pontos:

No utilizar notao hngara. A notao til


somente para nomear componentes e, mesmo assim,
quando existe a necessidade de identificao
facilitada do mesmo. Contudo se voc no possui um
padro para nomear componentes, de nada
adiantar utilizar a notao hngara.

Coloque nomes da forma mais clara possvel,


visando facilitar a compreenso da finalidade da
varivel. Em nomes compostos, faa combinaes
entre caracteres maisculos e minsculos.

Exemplos:
string nomeUsuario;
int tempoIntervaloPadrao;

Finalizo esta matria com a sensao que podia escrever


muito mais, contudo com a restrio de tamanho imposta pelas
regras estabelecidas. Agregando um valor adicional, a seguir
uma sugesto de nomes de componentes conforme a notao
hngara.

Nomes para componentes (notao hngara)

Windows Forms
Componente

Prefixo

Exemplo

Form

frm

frmEntry

Label

lbl

lblHelpMessage

LinkLabel

lnk

lnkEmail

Button

btn

btnExit

TextBox

txt

txtLastName

Menu

mnu

mnuFileOpen

CheckBox

chk

chkReadOnly

RadioButton

rad

radType

GroupBox

grp

grpActions

PictureBox

pic

picIcon

Panel

pnl

pnlGroup

DataGrid

grd

grdQueryResult

ListBox

lst

lstPolicyCodes

CheckedListBox

clb

clbOptions

ComboBox

cbo

cboEnglish

ListView

lvw

lvwHeadings

TreeView

tre

treOrganization

TabControl

tbc

tbcOptions

DateTimePicker

dtp

dtpPublished

MonthCalendar

mcl

mclPeriod

HScrollBar

hsb

hsbMove

VScrollBar

vsb

vsbMove

Timer

tmr

tmrAlarm

Splitter

spt

sptDivision

DomainUpDown

upd

updPages

NumericUpDown

nud

nudPieces

TrackBar

trb

trbIndex

ProgressBar

prg

prgLoadFile

RichTextBox

rtf

rtfReport

ImageList

ils

ilsAllIcons

HelpProvider

hlp

hlpOptions

ToolTip

tip

tipIcons

ContextMenu

cmn

cmnOpen

ToolBar

tlb

tlbActions

StatusBar

sta

staDateTime

NotifyIcon

nti

ntiOpen

OpenFileDialog

ofd

ofdImage

SaveFileDialog

sfd

sfdImage

FontDialog

ftd

ftdText

ColorDialog

cld

cldText

PrintDialog

ptd

ptdText

PrintPreviewDialog

ppd

ppdText

PrintPreviewControl

ppc

ppcText

ErrorProvider

err

errOpen

PrintDocument

prn

prnText

PageSetup Dialog

psd

psdReport

CrystalReportViewer

rpt

rptSales

Data
Componente

Prefixo

Exemplo

DataSet

dts

dtsProducts

OleDbDataAdapter

oda

odaClients

OleDbConnection

ocn

ocnClients

OleDbCommand

ocm

ocmConsult

SqlDataAdapter

sda

sdaClients

SqlConnection

scn

scnClients

SqlCommand

scm

scmConsult

DataView

dtv

dtvConsult

Fabio Camara, MCP, MCSA, MCAD Charter, MCDBA e MCSD.NET


Diretor da Architettura Solues em Tecnologia. Escreveu os livros
Projetos com Windows DNA e .NET, Dominando o Visual Studio.NET
com C# e Orientao a Objeto com .NET dentre outros, editados pela
Visual Books Editora. Pode ser contatado pela home page C# Br
(http://www.csharpbr.com.br).

Das könnte Ihnen auch gefallen