<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everson Novka &#187; Artigos</title>
	<atom:link href="http://www.eversonnovka.com/category/artigos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eversonnovka.com</link>
	<description>Delphi para todos!</description>
	<lastBuildDate>Tue, 06 Oct 2009 23:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Exportando dados de um DataSet para o formato JSON</title>
		<link>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exportando-dados-de-um-dataset-para-o-formato-json</link>
		<comments>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 20:32:31 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Everson Novka]]></category>
		<category><![CDATA[Exemplo]]></category>
		<category><![CDATA[exportação]]></category>
		<category><![CDATA[Exportar]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[lkjson]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.eversonnovka.com/?p=24</guid>
		<description><![CDATA[Neste artigo serão demonstrados algoritmos para exportação de dados de um DataSet para o formato JSON. Até a versão 2009 do Delphi não há nada nativo para manipulação de arquivos JSON, por isso utilizei uma biblioteca Open Source chamada Delphi JSON Library (http://sourceforge.net/projects/lkjson). O que é JSON? JSON (JavaScript Object Notation &#8211; Notação de Objetos [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo serão demonstrados algoritmos para exportação de dados de um DataSet para o formato JSON. Até a versão 2009 do Delphi não há nada nativo para manipulação de arquivos JSON, por isso utilizei uma biblioteca Open Source chamada Delphi JSON Library (http://sourceforge.net/projects/lkjson).</p>
<p><strong>O que é JSON?</strong></p>
<p>JSON (JavaScript Object Notation &#8211; Notação de Objetos JavaScript) é uma formatação leve de troca de dados. Para seres humanos, é fácil de ler e escrever. Para máquinas, é fácil de interpretar e gerar. Está baseado em um subconjunto da linguagem de programação JavaScript, Standard ECMA-262 3a Edição -Dezembro &#8211; 1999. JSON é em formato texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens, incluindo C++, C#, Java, JavaScript, Perl, Python, Delphi e muitas outras. Estas propriedades fazem com que JSON seja um formato ideal de troca de dados.</p>
<p>JSON está constituído em duas estruturas:</p>
<p>•             Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, hash table, keyed list, ou arrays associativas;</p>
<p>•             Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como um array, vetor, lista ou sequência.</p>
<p>São estruturas de dados universais. Virtualmente, todas as linguagens de programação modernas as suportam, de uma forma ou de outra. É aceitável que um formato de troca de dados que seja independente de linguagem de programação se baseie nessas estruturas.</p>
<p>Em JSON, os dados são apresentados da seguinte forma:</p>
<p>Um objeto é um conjunto desordenado de pares nome/valor. Um objeto começa com <strong>{</strong> (chave de abertura) e termina com <strong>}</strong> (chave de fechamento). Cada nome é seguido por <strong>:</strong> (dois pontos) e os pares nome/valor são seguidos por <strong>,</strong> (vírgula).</p>
<p><strong>Classes da biblioteca lkjson utilizadas:</strong></p>
<p><strong>TlkJSONobject: </strong>Utilizada para o cabeçalho e itens de lista do arquivo JSON;</p>
<p><strong>TlkJSONlist: </strong>Utilizada para guardar a lista de valores e nomes dos fields do DataSet.</p>
<p><strong>Implementação da classe manipuladora do arquivo JSON:</strong></p>
<pre name="code" class="pascal">
unit DataSetToJsonEngine;

interface

uses DB, uLkJSON;

type
  TCustomDataSetToJson = class
  private
    FJsonObjectMain : TlkJSONobject;
    FDataSet: TDataSet;
    procedure SetDataSet(const Value: TDataSet);
    procedure ValidateDataSet;
  public
    property DataSet : TDataSet read FDataSet write SetDataSet;
    constructor Create(const ADataSet : TDataSet);
    destructor Destroy; override;
    function Convert : WideString;
  end;

  TDataSetToJson = class(TCustomDataSetToJson);

implementation

uses SysUtils;

{ TCustomDataSetToJson }

function TCustomDataSetToJson.Convert: WideString;
var
  JsonList : TlkJSONlist;
  JsonDataFieldList : array of TlkJSONobject;
  I, IdxRecord : Integer;
begin
  ValidateDataSet;
  JsonList := TlkJSONlist.Create;
  try
    // Monto o cabeçalho da string Json
    FJsonObjectMain.Add('DataSetName', FDataSet.Name);
    FJsonObjectMain.Add('DataSetCount', FDataSet.RecordCount);
    with FDataSet do
    begin
      First;
      IdxRecord := 0;
      SetLength(JsonDataFieldList, FDataSet.RecordCount);
      // Adiciono os valores e nomes dos fields em uma lista
      while not EOF do
      begin
        JsonDataFieldList[IdxRecord] := TlkJSONobject.Create;
        for I := 0 to FieldCount - 1 do
          JsonDataFieldList[IdxRecord].Add(Fields[I].FieldName, Fields[i].AsString);
        JsonList.Add(JsonDataFieldList[IdxRecord]);
        Next;
        Inc(IdxRecord);
      end;
      // Atribuo a lista no objeto principal do Json
      FJsonObjectMain.Add('DataFieldList', JsonList);
      Result := TlkJSON.GenerateText(FJsonObjectMain);
    end;
  finally
    FreeAndNil(JsonList);
  end;
end;

constructor TCustomDataSetToJson.Create(const ADataSet: TDataSet);
begin
  FDataSet := ADataSet;
  FJsonObjectMain := TlkJSONobject.Create;
end;

destructor TCustomDataSetToJson.Destroy;
begin
  FJsonObjectMain.Free;
  inherited;
end;

procedure TCustomDataSetToJson.SetDataSet(const Value: TDataSet);
begin
  FDataSet := Value;
end;

procedure TCustomDataSetToJson.ValidateDataSet;
begin
  if FDataSet = nil then
    raise Exception.Create('DataSet não atribuído');
  FDataSet.Active := not(FDataSet.Active);
  if FDataSet.IsEmpty then
    raise Exception.Create('DataSet vazio');
end;

end.</pre>
<p><strong>Consumindo a classe manipuladora:</strong></p>
<p>Criar<strong> </strong>um novo form, adicione um botão e um MEMO. No evento OnClick do botão adicione<strong> </strong>o seguinte código:</p>
<pre name="code" class="pascal">
procedure TfrmDataSetToJsonMain.Button1Click(Sender: TObject);
var
  JsonEngine : TDataSetToJson;
begin
  JsonEngine := TDataSetToJson.Create(SQLQuery1);
  Memo1.Text := JsonEngine.Convert;
end;</pre>
<p><strong>Testando o arquivo JSON gerado:</strong></p>
<p>Neste exemplo o arquivo JSON foi gerando dentro de um campo MEMO, o texto nele contido poderá ser testado em uma ferramenta web, segue link: <a href="http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html">http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html</a></p>
<p style="text-align: center;">
<div id="attachment_35" class="wp-caption aligncenter" style="width: 566px"><img class="size-full wp-image-35  " title="TesteJson" src="http://www.eversonnovka.com/wp-content/uploads/2009/09/TestJSON.jpg" alt="Testando arquivo JSON" width="556" height="441" /><p class="wp-caption-text">Testando arquivo JSON</p></div>
<p><a href="http://www.eversonnovka.com/exemplos/json.rar">Fontes &#8211; Delphi 2009</a></p>
<p>Os dados exportados nesse exemplo está no banco de dados de exemplo do Firebird 2.1. Utilizei uma conexão DBExpress com o driver da Embarcadero <a href="http://groups.google.com/group/dbxfirebird">http://groups.google.com/group/dbxfirebird </a></p>
<p>Este é um pequeno exemplo de como criar arquivos JSON de forma rápida e fácil. No próximo artigo teremos um exemplo de como trocar arquivos JSON via socket com uma aplicação JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Padronização de código</title>
		<link>http://www.eversonnovka.com/padronizacao-de-codigo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=padronizacao-de-codigo</link>
		<comments>http://www.eversonnovka.com/padronizacao-de-codigo/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 05:30:33 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Nomenclatura]]></category>
		<category><![CDATA[Padrão de código]]></category>
		<category><![CDATA[Padrão delphi]]></category>

		<guid isPermaLink="false">http://delphi2010.wordpress.com/?p=11</guid>
		<description><![CDATA[Este Artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem Delphi]]></description>
			<content:encoded><![CDATA[<p align="center"><strong>Introdução</strong><br />
Este artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem <strong>Delphi para Windows</strong>.</p>
<p><span style="text-decoration:underline;"><br />
</span></p>
<p><strong>1. Estilos de Capitalização</strong><strong> </strong></p>
<p>Existem três tipos de convenções de nomenclatura. São eles: Pascal Case, Camel Case e Upper Case. Em todas as convenções se refere ao uso de maiúsculas ou minúsculas nos nomes. Todas se aplicam a nomes formados por várias palavras.</p>
<p><strong><em>1.1. Pascal Case</em></strong><strong> </strong></p>
<p>A primeira letra do identificador e as primeiras letras das palavras subseqüentes são maiúsculas.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.2. Camel Case</em></strong><strong> </strong></p>
<p>A primeira letra da primeira palavra é em minúscula, e as demais palavras subseqüentes iniciam com maiúscula.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>b</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.3. Upper Case</em></strong><strong> </strong></p>
<p>Todas as letras são maiúsculas. Usada somente para constantes.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CHAVE_CRIPTOGRAFIA   = String(‘#F$%A&amp;DH’);</td>
</tr>
</tbody>
</table>
<p><strong>2. Tabela de Regras de Capitalização</strong><strong> </strong><strong> </strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="171" valign="top"><strong>Tipo</strong></td>
<td width="92" valign="top"><strong>Estilo</strong></td>
<td width="286" valign="top"><strong>Obrigatório</strong></td>
</tr>
<tr>
<td width="171" valign="top">Classes</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">T<strong>C</strong>liente<strong>C</strong>adastro   (Utilizar T no início)</td>
</tr>
<tr>
<td width="171" valign="top">Eventos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>V</strong>alue<strong>C</strong>hange</td>
</tr>
<tr>
<td width="171" valign="top">Variáveis</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Interface</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>ID</strong>isposable</td>
</tr>
<tr>
<td width="171" valign="top">Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>onverte<strong>V</strong>alor()</td>
</tr>
<tr>
<td width="171" valign="top">Nome de   Unit</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>liente<strong>C</strong>adastro<strong>F</strong>orm.pas</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade</td>
<td width="92" valign="top">PascaCase</td>
<td width="286" valign="top"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Public</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Parâmetro   de Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">A<strong>N</strong>ome<strong>P</strong>arametro</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Protected</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade Private</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>D</strong>omain<strong>U</strong>ser</td>
</tr>
<tr>
<td width="171" valign="top">Constantes</td>
<td width="92" valign="top">UpperCase</td>
<td width="286" valign="top"><strong>CODIGO_SISTEMA</strong></td>
</tr>
<tr>
<td width="171" valign="top">Numeradores</td>
<td width="92" valign="top">camelCase</td>
<td width="286" valign="top"><strong>(st</strong>Aberto, <strong>st</strong>Fechado, <strong>st</strong>Desconhecido<strong>)</strong></td>
</tr>
</tbody>
</table>
<p><strong>3. Padrão de Nomenclatura</strong><strong> </strong></p>
<p>Nomear corretamente objetos, componentes, arquivos, pastas, enfim, elementos em geral, é muito importante para um bom entendimento do projeto como um todo. Um simples arquivo nomeado errado, ou sem um padrão definido, pode confundir e prejudicar uma futura manutenção. Portanto, questões importantes devem ser consideradas na nomenclatura do projeto:<br />
· Não utilize notação húngara. A notação é útil somente para nomear componentes e, mesmo assim, quando existe a necessidade de identificação facilitada do mesmo;<br />
· Coloque nomes da forma mais clara possível, visando facilitar a compreensão da finalidade;<br />
· Em nomes compostos, faça combinações entre caracteres maiúsculos e minúsculos para PascalCase;<br />
· Utilize abreviações com responsabilidade, e conforme a necessidade;<br />
· Utilize nomes em português;<br />
· Não utilize espaços, acentos, cedilhas, sublinhas ou caracteres especiais, mesmo que o contexto do que está sendo nomeado permita.</p>
<p><strong><em>3.1. Classes</em></strong><strong> </strong></p>
<p><strong>3.1.1. Classes</strong><strong> Objeto</strong><strong> </strong></p>
<p>· Nomeie classes objeto com nomes/substantivos;<br />
· Use PascalCase;<br />
· Não use prefixo de classe (por exemplo: CFTP);<br />
· Utilize “T” no início do nome da declaração da classe;<br />
· Não use o caractere de sublinha (_).<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="538">TUsuario = Class;<br />
TUsuarioPadrao = TUsuario;<br />
TUsuarioBasico = TUsuario;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.2. Interfaces</em></strong><strong> </strong></p>
<p>· Nomeie interfaces com substantivos ou adjetivos que descrevem o comportamento;<br />
· Use PascalCase;<br />
· Não use o caractere de sublinha (_);<br />
· Coloque a letra I como prefixo, para indicar que o tipo é uma interface;<br />
· Use nomes similares quando definir pares de classes/interfaces, onde a classe é uma implementação padrão das interfaces. O nome deve diferir apenas com a letra I, que é o prefixo do nome da interface.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">IUsuarioBase = <strong>Interface </strong><br />
TppInterfacedObject = <strong>class(TObject, IUnknown)</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.3. Parâmetros</em></strong><strong> </strong></p>
<p>· Use nomes de parâmetros descritivos. Nomes de parâmetros devem ser descritivos o suficiente para que se possa, baseado no nome do parâmetro e seu tipo, determinar o que o parâmetro significa;<br />
· Use PascalCase;<br />
· Use nomes baseados no significado do parâmetro e não baseados no tipo do parâmetro;<br />
· Não use parâmetros reservados (por exemplo: params, args, etc);<br />
· Não use notação Húngara.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>procedure </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro);<br />
<strong>function </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro) : Integer;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.4. Variáveis</em></strong><strong> </strong></p>
<p>· Nomeie Variáveis usando substantivos;<br />
· Use PascalCase;<br />
· Nunca utilize o caractere de sublinha (_);<br />
· Quando for variável declarada na interface, utilize “F” no início do nome.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Private</p>
<p>FNomeUsuario : String;</p>
<p>FSenhaUsuario : String;</p>
<p>Public</p>
<p>FNomeEmpresa   : String;</p>
<p>End;</td>
</tr>
</tbody>
</table>
<p><strong><br />
</strong><strong>Declaração em métodos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Procedure   <strong>ProcessaUsuario(</strong>ACodigoUsuario : Integer<strong>);</strong></p>
<p><strong>var</strong></p>
<p>ValorTemporario   : Integer;</p>
<p>NomeUsuario   : String;</p>
<p><strong>begin</strong></p>
<p><strong>//</strong></p>
<p><strong>end;</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.5. Propriedades</em></strong><strong> </strong></p>
<p>· Nomeie propriedades usando substantivos;<br />
· Use PascalCase;<br />
· Considere ter uma propriedade com o mesmo nome do tipo;<br />
· Quando declarar uma propriedade com o mesmo nome do tipo, defina o mesmo tipo da propriedade;<br />
· Não utilize o “T” no início do nome, “T” é utilizado apenas na declaração de tipos.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">private</p>
<p><strong>FNomeUsuario : String;</strong></p>
<p>public</p>
<p>property <strong>NomeUsuario :   String read FNomeUsuario write FNomeUsuario</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.6. Nome para Arquivos (Units)</em></strong><strong></strong></p>
<p>· Use PascalCase para nomear arquivos;<br />
· Para formar o nome, utilize o nome da funcionalidade, o tipo da funcionalidade, e o tipo de formulário (<em>form</em>) que você está utilizando (caso esse arquivo seja de um formulário).<br />
<strong>Exemplos de formulários:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CategoriaCadastroForm.pas<br />
UsuarioListaForm.pas<br />
EntradaForm.pas<br />
UsuarioPesquisaForm.pas</td>
</tr>
</tbody>
</table>
<p><strong><em>3.7. Prefixo para Objetos de Interface</em></strong><strong></strong></p>
<p>· Esses objetos ainda seguem a notação húngara;<br />
· Use as abreviações, nas tabelas a seguir, como prefixo dos objetos;<br />
· Use CamelCase para nomear objetos de interface;<br />
· Utilize a seguinte regra: Três consoantes + Nome do Objeto. Exemplos:<br />
- <strong>Q</strong>ue<strong>ry</strong> da tabela Banco à qryBanco;<br />
- <strong>C</strong>lient<strong>D</strong>ata<strong>S</strong>et da tabela Banco à cdsBanco;<br />
- <strong>D</strong>ata<strong>S</strong>ou<strong>r</strong>ce ligado ao ClientDataSet à dsrBanco.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">T<strong>B</strong>u<strong>t</strong>to<strong>n   = btnNomeBotao; </strong>(Tentar não repetir consoantes).<br />
TADO<strong>Q</strong>ue<strong>ry</strong> = <strong>qryNomeQuery; </strong><br />
T<strong>S</strong>peed<strong>B</strong>u<strong>t</strong>ton = <strong>sbtNomeBotao;</strong><br />
T<strong>A</strong>ction<strong>L</strong>i<strong>s</strong>t = <strong>alsNomeActionList</strong>;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.8. Prefixo para Formulários (Form) e Módulos de Dados (DataModule)</em></strong><strong></strong></p>
<p>· Use CamelCase;<br />
· Form = utilizar “<strong>frm</strong>” + o nome da funcionalidade;<br />
· DataModule = utilizar “<strong>dmd</strong>” + o nome da funcionalidade.</p>
<p><strong>Exemplos para DataModule:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>dmdClienteProcesso</strong> : TDataModule;<br />
<strong>dmdClienteCadastro</strong> : TDataModule;<br />
<strong>dmdPessoaUsuarioCadastro</strong> : TDataModule;</td>
</tr>
</tbody>
</table>
<p><strong>Exemplos para Form:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>frmClienteProcesso</strong> : TFom;<br />
<strong>frmClienteCadastro</strong> : TForm;<br />
<strong>frmPessoaUsuarioCadastro</strong> : TForm;</td>
</tr>
</tbody>
</table>
<p><strong>4. Endentação</strong><strong></strong></p>
<p>A endentação citada é sobre o número de espaços entre os níveis de tabulação. Utilize como padrão 2 espaços. Este padrão pode ser configurado na janela de opções do <strong>Borland Delphi</strong>.</p>
<p>Evite escrever linhas com mais de 80 posições entre espaços e caracteres. A idéia é facilitar a compreensão do código e, se possível, visualizar a linha inteira em seu editor de código. Caso alguns trechos de código fiquem muito extensos, poderá ser feita a quebra da linha, entretanto é necessário seguir os seguintes princípios:<br />
· Quebrar a linha após uma vírgula;</p>
<p>· Quebrar a linha após um operador;</p>
<p>· Alinhar a nova linha no início da expressão no mesmo nível da linha anterior.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">calculaArea(expr1,   expr2, expr3,</p>
<p>expr4,   expr5);</p>
<p><em>ou</em></p>
<p>var :=   a *b / (c &#8211; g + f)<strong> + </strong></p>
<p>4 * z;</td>
</tr>
</tbody>
</table>
<p>Outra questão importante é a utilização de espaços em branco para endentação. Utilize espaços em branco para endentação, nunca use tabulação!</p>
<p><strong>5. Comentários</strong><strong></strong></p>
<p>Os comentários são muito importantes, tanto para relembrar você como para orientar outra pessoa sobre a manutenção do código fonte. Comente tudo que puder, da seguinte forma:<br />
· Utilize as duas barras “//” para comentar trechos de código;<br />
· Utilize “{}” para comentar blocos.</p>
<p><strong><em>5.1. Cabeçalho de Arquivos (Units)</em></strong><strong></strong></p>
<p>Comentários de cabeçalho são importantes para saber quem foi o responsável pelo desenvolvimento e as alterações aplicadas na unit. Portanto:<br />
· Descreva o propósito da unit;<br />
· Coloque o nome do programador responsável pelo desenvolvimento inicial da unit;<br />
· Coloque o nome do analista responsável;<br />
· O item Revisões será utilizado quando for feita uma manutenção na unit;<br />
· Comentários adicionais são importantes caso as alterações efetuadas nessa unit possam afetar alguma outra funcionalidade do sistema.</p>
<p><strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">(*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Propósito   da Unit:<br />
Programador:   Data: ??<br />
Analista   Responsável:<br />
Revisões:<br />
Programador:<br />
Data:   Descrição da Revisão<br />
Comentários   adicionais:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*)</td>
</tr>
</tbody>
</table>
<p><strong><em>5.2. Cabeçalho de Métodos</em></strong><strong></strong></p>
<p>Ao descrever o cabeçalho de um Método:<br />
· Utilize comentário de bloco;<br />
· Não seja detalhista, tente ser objetivo em seu comentário;<br />
· Comente sobre os parâmetros, caso hajam.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">{&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
*   Propósito do Método: Exibir uma mensagem de Pergunta utilizando MessageBox<br />
*<br />
*   Utilização dos parâmetros:<br />
ATitulo   = Titulo da Mensagem (Caption).<br />
AMensagem   = Mensangem que ira aparecer no corpo do MessageBox.<br />
Result   = Retorna True caso seja selecionado a opção Sim no MessageBox.<br />
* Autor   / Data: Everson R. Novka 09/06/2006<br />
*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;}<br />
class   function TFWMensagem.Pergunta(const ATitulo,<br />
AMensagem:   String): Boolean;<br />
begin<br />
Result   := (MessageBox(0, PChar(AMensagem), pChar(ATitulo),<br />
MB_ICONQUESTION   or MB_YESNO or MB_DEFBUTTON2) = idYes);<br />
end;</td>
</tr>
</tbody>
</table>
<p><strong><em>5.3. Comentários dentro de métodos</em></strong><strong></strong></p>
<p>· Utilize “//” para comentários de apenas um linha;<br />
· Utilize comentário em bloco ( { &#8230; } ) somente em rotinas para comentários de mais de uma linha, a questão visual é fundamental para um melhor entendimento.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">function TfrmMovPontoManual.tbKeyIsDown(const key: integer): boolean;<br />
begin<br />
//Retorna se a tecla especificada está pressionada.<br />
//Gislaine &#8211; 26/09/2005<br />
Result := GetKeyState(Key) and 128 &gt; 0;<br />
end;<br />
}</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/padronizacao-de-codigo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

