PageRenderTime 47ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/pt/contributing/cakephp-coding-conventions.rst

https://github.com/markstory/cakephp-docs
ReStructuredText | 332 lines | 242 code | 90 blank | 0 comment | 0 complexity | a5a19a2a43507c58440ef92dcae538bb MD5 | raw file
  1. Padrões de Codificação
  2. ######################
  3. Os desenvolvedores Cake vão sempre usar os seguintes padrões de codificação.
  4. É recomendavel que qualquer um que for desenvolver algum ingrediente para o Cake utilize esses padrões.
  5. Adicionando novos recursos
  6. ==========================
  7. Nenhum novo recurso deve ser adicionado ou disponibilizado sem que tenha seus próprios testes - os quais devem todos passar antes de se submeter seus códigos para o repositório.
  8. Indentação
  9. ==========
  10. Um tab é usado para a indentação.
  11. Dessa forma, o código deve ser algo parecido com isto::
  12. // base level
  13. // level 1
  14. // level 2
  15. // level 1
  16. // base level
  17. Ou::
  18. $booleanVariable = true;
  19. $stringVariable = "moose";
  20. if ($booleanVariable) {
  21. echo "Boolean value is true";
  22. if ($stringVariable == "moose") {
  23. echo "We have encountered a moose";
  24. }
  25. }
  26. Estruturas de controle
  27. ======================
  28. Estruturas de controle são "``if``", "``for``", "``foreach``",
  29. "``while``", "``switch``" etc. Veja um exemplo abaixo com "``if``"::
  30. <?php
  31. if ((expr_1) || (expr_2)) {
  32. // action_1;
  33. } elseif (!(expr_3) && (expr_4)) {
  34. // action_2;
  35. } else {
  36. // default_action;
  37. }
  38. * Em estruturas de controle, deve haver 1 (um) espaço antes do primeiro
  39. parênteses e 1 (um) espaço entre o último parênteses e o abre-chaves.
  40. * Sempre utilize chaves para delimitar blocos em estruturas de contole
  41. mesmo se elas não forem necessárias. Chaves aumentam a legibilidade
  42. do código, o que reduz a possibilidade de erros de lógica.
  43. * O caracter abre-chaves deve estar na mesma linha que a estrutura de controle.
  44. o fecha-chaves deve estar sempre numa nova linha, e deve ter o mesmo nível de
  45. indentação da estrutura de controle. O bloco de instruções delimitado pelas chaves
  46. deve começar numa nova linha, e o código nele contido deve ser um nível de indentação
  47. maior que o da estrutura de controle.
  48. ::
  49. <?php
  50. // wrong = no brackets, badly placed statement
  51. if (expr) statement;
  52. // wrong = no brackets
  53. if (expr)
  54. statement;
  55. // good
  56. if (expr) {
  57. statement;
  58. }
  59. Operador Ternário
  60. -----------------
  61. O Operador Ternário é permitido quando a operação ternária cabe em uma linha.
  62. Ternários mais longos devem ser divididos em uma instrução ``if else``. Você não deve
  63. aninhar operadores ternários. Opcionalmente, parênteses podem ser utilizados em
  64. volta da condição de verificação do ternário para dar mais clareza::
  65. //Good, simple and readable
  66. $variable = isset($options['variable']) ? $options['variable'] : true;
  67. //Nested ternaries are bad
  68. $variable = isset($options['variable']) ? isset($options['othervar']) ? true : false : false;
  69. Chamadas de Funções
  70. ===================
  71. Funções deve ser chamadas sem espaços entre o nome da função e o abre-parênteses.
  72. Deverá ter um espaço entre cada parâmetro na chamda da função::
  73. <?php
  74. $var = foo($bar, $bar2, $bar3);
  75. Como você pode ver neste código, também deve haver um espaço em ambos os lados do sinal de atribuição (=).
  76. Definição de Metódos
  77. ====================
  78. Exemplo de definição de metódo::
  79. <?php
  80. function someFunction($arg1, $arg2 = '') {
  81. if (expr) {
  82. statement;
  83. }
  84. return $var;
  85. }
  86. Parâmetros que possuam valores padrões devem ser adicionados por últimos
  87. na definição do metódo. Tente fazer que seus metódos sempre retornem algo, pelos menos
  88. true ou false - assim facilita a identificação que a chamada ao metódo realmente aconteceu::
  89. <?php
  90. function connection($dns, $persistent = false) {
  91. if (is_array($dns)) {
  92. $dnsInfo = $dns;
  93. } else {
  94. $dnsInfo = BD::parseDNS($dns);
  95. }
  96. if (!($dnsInfo) || !($dnsInfo['phpType'])) {
  97. return $this->addError();
  98. }
  99. return true;
  100. }
  101. De novo, note que deve haver espaços em ambos os lados dos sinais de igual.
  102. Comentando o Código
  103. ===================
  104. Todos os comentários devem ser escritos em Inglês
  105. e deve haver uma clara maneira de identificar o bloco de código comentado.
  106. Comentários podem conter as seguintes tags do `phpDocumentor <http://phpdoc.org>`:
  107. * `@access <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.access.pkg.html>`_
  108. * `@author <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.author.pkg.html>`_
  109. * `@copyright <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.copyright.pkg.html>`_
  110. * `@deprecated <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.deprecated.pkg.html>`_
  111. * `@example <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.example.pkg.html>`_
  112. * `@ignore <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.ignore.pkg.html>`_
  113. * `@internal <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.internal.pkg.html>`_
  114. * `@link <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.link.pkg.html>`_
  115. * `@see <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.see.pkg.html>`_
  116. * `@since <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.since.pkg.html>`_
  117. * `@tutorial <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.tutorial.pkg.html>`_
  118. * `@version <http://manual.phpdoc.org/HTMLframesConverter/phpdoc.de/phpDocumentor/tutorial_tags.version.pkg.html>`_
  119. As tags PhpDoc são bem parecidas com as tags JavaDoc em Java. As tags
  120. são processadas se elas forem a primeira coisa a aparecer numa linha
  121. de um bloco de documentação. Por exemplo::
  122. /**
  123. * Tag example.
  124. * @author this tag is parsed, but this @version is ignored
  125. * @version 1.0 this tag is also parsed
  126. */
  127. ::
  128. <?php
  129. /**
  130. * Example of inline phpDoc tags.
  131. *
  132. * This function works hard with foo() to rule the world.
  133. */
  134. function bar() {
  135. }
  136. /**
  137. * Foo function
  138. */
  139. function foo() {
  140. }
  141. Todos os blocos de comentários, exceto o primeiro bloco de um arquivo,
  142. devem ser precedidos com uma linha em branco.
  143. Includindo Arquivos
  144. ===================
  145. Se for precisar incluir arquivos com classes ou bibliotecas,
  146. utilize sempre a função `require\_once <http://php.net/require_once>`_.
  147. Tags PHP
  148. ========
  149. Sempre utilize tags do PHP longas (<?php ?>) ao invés de tags curtas (<? ?>).
  150. Convenções de Nomenclatura
  151. ==========================
  152. Metódos
  153. -------
  154. Escreva todos os metódos em camelBack::
  155. function longFunctionName() {
  156. }
  157. Classes
  158. -------
  159. Nome de Classes devem ser escritar em CamelCase, por exemplo::
  160. class ExampleClass {
  161. }
  162. Variáveis
  163. ---------
  164. Nomes de variável devem ser os mais descritivos possível, mas também tão curtos quanto possível.
  165. Variáveis normais devem ter inicial minúscula e escritas no formato camelBack? caso sejam compostas
  166. por mais de uma palavra. Variáveis que contenham objetos devem iniciar com uma letra maiúscula
  167. e estar associadas de alguma maneira ao nome da classe a que o objeto pertence.
  168. Por exemplo::
  169. $user = 'John';
  170. $users = array('John', 'Hans', 'Arne');
  171. $Dispatcher = new Dispatcher();
  172. Visibilidade de Membros
  173. -----------------------
  174. Use private e protected para metódos e variáveis. Em adicional, metódos ou variáveis
  175. protected começa com um underscore("\_"). Exemplo::
  176. class A {
  177. protected $_iAmAProtectedVariable;
  178. protected function _iAmAProtectedMethod() {
  179. /*...*/
  180. }
  181. }
  182. Métodos ou variáveis private começa com dois underscore ("\_\_"). Exemplo::
  183. class A {
  184. private $__iAmAPrivateVariable;
  185. private function __iAmAPrivateMethod() {
  186. /*...*/
  187. }
  188. }
  189. Métodos Encadeados
  190. ------------------
  191. Métodos encadeados devem ser chamandos em múltiplas linhas e indentado com um tab::
  192. $email->from('foo@example.com')
  193. ->to('bar@example.com')
  194. ->subject('A great message')
  195. ->send();
  196. Endereços de Exemplos
  197. ---------------------
  198. Para todas as URLs e endereços de email de exemplo, utilize "example.com",
  199. "example.org" ou "example.net" como domínios. Por exemplo:
  200. * Email: fulano@example.com
  201. * WWW: `http://www.example.com <http://www.example.com>`_
  202. * FTP: `ftp://ftp.example.com <ftp://ftp.example.com>`_
  203. O domínio ``example.com`` é reservado para este propósito (see :rfc:`2606`) e é recomendado
  204. utilizar em documentações ou exemplos.
  205. Arquivos
  206. --------
  207. Nomes de arquivos devem ser criados em minúsculas. Se um nome de
  208. arquivo consistir de múltiplas palavras, elas devem ser
  209. divididas por um caracter underscore. Por exemplo:
  210. ::
  211. long_file_name.php
  212. Tipos de Variáveis
  213. ------------------
  214. Os tipos de variáveis disponíveis para uso em blocos de documentação são:
  215. Tipo
  216. Descrição
  217. mixed
  218. Variável com tipo indefinido ou que pode assumir vários tipos.
  219. integer
  220. Número inteiro
  221. float
  222. Número ponto flutuante
  223. boolean
  224. Tipo lógico (true ou false)
  225. string
  226. Tipo string (qualquer valor entre "" ou ' ').
  227. array
  228. Tipo array.
  229. object
  230. Tipo objeto
  231. resource
  232. Tipo recurso (como retornado, p.ex., pelo mysql\_connect()).
  233. Lembre-se que quando você especifica como mixed, você deve indicar
  234. qual os valores possíves
  235. Constantes
  236. ----------
  237. Contantes devem ser definidas em letras maiúsculas:
  238. ::
  239. define('CONSTANT', 1);
  240. Se você escolher o nome de uma constante com múltiplas palavras, elas devem ser separadas por um caracter underscore. Por exemplo:
  241. ::
  242. define('LONG_NAMED_CONSTANT', 2);