Está en la página 1de 22

Convenciones de cdigo para el lenguaje de programacin

JAVA

Revisado 20 Abril de 1999 por Scott Hommel Sun Microsystems Inc. Traducido al castellano 10 Mayo del 2001 por Alberto Molpeceres http !!""".#avahispano.com Revisi$n y correcci$n% mar&o de 200' por (ucas )ieites http !!""".code*ion.com

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

2!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Convenciones de cdigo para el lenguaje de programacin Java


TM

Revisado% 20 de Abril de 1999 Traducido al castellano% 10 de Mayo del 2001 Revisi$n y correcci$n% mar&o de 200'

ndice de contenido
1 Introduccin.....................................................................................................................5 1.1 .or /u0 convenciones de c$di,o......................................................................................................1 1.2 A,radecimientos..............................................................................................................................1 1.2 Sobre la traducci$n..........................................................................................................................1 !om"res de arc#ivo..........................................................................................................5 2.1 3*tensiones de los archivos.............................................................................................................1 2.2 4ombres de archivo com5nes.........................................................................................................6 $ %rgani&acin de los arc#ivos.............................................................................................' 2.1 Archivos de c$di,o 7uente -ava........................................................................................................6 3.1.1 Comentarios de inicio..............................................................................................................6 3.1.2 Sentencias package e import..................................................................................................7 3.1.3 Declaraciones de clases e interfaces.......................................................................................7 ( Indentacin......................................................................................................................) 8.1 (on,itud de la l9nea.........................................................................................................................: 8.2 Rotura de l9neas..............................................................................................................................: 5 Comentarios.....................................................................................................................* 1.1 ;ormatos de los comentarios de implementaci$n..........................................................................10 5.1.1 Comentarios de bloque..........................................................................................................10 5.1.2 Comentarios de una l nea......................................................................................................11 5.1.3 Comentarios finales...............................................................................................................11 5.1.! Comentarios de fin de l nea...................................................................................................11 1.2 +omentarios de documentaci$n....................................................................................................11 ' +eclaraciones.................................................................................................................1 6.1 +antidad por l9nea.........................................................................................................................12 6.2 Iniciali&aci$n..................................................................................................................................12 6.2 +olocaci$n.....................................................................................................................................12 6.8 <eclaraciones de clases e inter7aces.............................................................................................12 ) ,entencias.....................................................................................................................1( '.1 Sentencias simples........................................................................................................................18 '.2 Sentencias compuestas.................................................................................................................18 '.2 Sentencias de retorno....................................................................................................................18

2!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

'.8 Sentencias i7% i7=else% i7 else=i7 else.................................................................................................18 '.1 Sentencias 7or................................................................................................................................11 '.6 Sentencias "hile............................................................................................................................11 '.' Sentencias do="hile.......................................................................................................................16 '.: Sentencias s"itch..........................................................................................................................16 '.9 Sentencias try=catch......................................................................................................................16 - .spacio en "lanco...........................................................................................................1) :.1 (9neas en blanco............................................................................................................................1' :.2 3spacios en blanco........................................................................................................................1' * Convenciones de nomenclatura.......................................................................................11/ 01"itos de programacin..............................................................................................110.1 .roporcionar acceso a variables de instancia y de clase..............................................................1: 10.2 Re7erencias a variables y m0todos de clase................................................................................19 10.2 +onstantes..................................................................................................................................19 10.8 Asi,naciones de variables............................................................................................................19 10.1 H>bitos varios..............................................................................................................................19 10.5.1 "ar#ntesis............................................................................................................................1$ 10.5.2 %alores de retorno...............................................................................................................20 10.5.3 &'presiones antes de ()* en el operador condicional..........................................................20 10.5.! Comentarios especiales.......................................................................................................20 11 .jemplo de cdigo......................................................................................................... / 11.1 3#emplo de archivo 7uente -ava....................................................................................................20

8!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Introducci$n

1 Introduccin
1.1 2or 3u4 convenciones de cdigo
(as convenciones de c$di,o son importantes para los pro,ramadores por muchas ra&ones

3l :0? del coste del c$di,o de un pro,rama va a su mantenimiento. +asi nin,5n so7t"are lo mantiene toda su vida el auto ori,inal. (as convenciones de c$di,o me#oran la lectura del so7t"are% permitiendo entender c$di,o nuevo mucho m>s r>pidamente y m>s a 7ondo. Si distribuye su c$di,o 7uente como un producto% necesita ase,urarse de /ue est> bien hecho y presentado como cual/uier otro producto.
.ara /ue 7uncionen las convenciones% cada persona /ue escribe so7t"are debe se,uir la

convenci$n. +odos.

1.

Agradecimientos

3ste documento re7le#a los est>ndares de codi7icaci$n del len,ua#e -ava presentados en @,a-a .anguage SpecificationA% de Sun Microsystems% Inc. (os mayores contribuidores son .eter Bin,% .atricC 4au,hton% MiCe <eMoney% -onni Banerva% Bathy Dalrath% y Scott Hommel. 3ste documento es mantenido por Scott Hommel. 3nv9e sus comentarios a shommelEen,.sun.com

1.$ ,o"re la traduccin


3ste documento ha sido traducido al espaFol por Alberto Molpeceres% para el sitio "eb #avaHispano G""".#avaHispano.comH% y se encuentra li,ado al ob#etivo de dicha "eb de 7omentar el uso y conocimiento del len,ua#e -ava dentro del mundo hispanoparlante. Se ha intentado hacer una traducci$n lo m>s literal posible% y esta es la 5nica parte del documento /ue no pertenece a la versi$n ori,inal. Se pueden enviar los comentarios sobre la traducci$n a la direcci$n alE#avahispano.com. 3ste documento ha sido revisado y corre,ido en mar&o de 200' por (ucas )ieites

G""".code*ion.comH .

!om"res de arc#ivo
3sta secci$n enumera las e*tensiones y los nombres de archivo m>s usados .

.1 .5tensiones de los arc#ivos


3l so7t"are -ava usa las si,uientes e*tensiones para sus archivos

1!22

4ombres de archivo

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Tipo de arc#ivo +$di,o #ava Iytecode de #ava

.5tensin .#ava .class

!om"res de arc#ivo comunes

3ntre los nombres de archivo m>s utili&ados se encuentran

!om"re de arc#ivo
J4KmaCe7ile

6so
3l nombre pre7erido para un archivo @makeA. Ksamos gnumake para construir nuestro so7t"are. 3l nombre pre7erido para el archivo /ue resume los contenidos de un directorio en concreto.

R3A<M3

$ %rgani&acin de los arc#ivos


Kn archivo est> 7ormado por secciones /ue deben estar separadas por l9neas en blanco y comentarios opcionales /ue identi7ican cada secci$n. Se deber> evitar la creaci$n de archivos de m>s de 2000 l9neas puesto /ue son inc$modos de mane#ar. .ara ver un e#emplo de un pro,rama de -ava debidamente 7ormateado% vea @ 11.1 3#emplo de archivo 7uente -avaA.

$.1 Arc#ivos de cdigo 7uente Java


+ada archivo 7uente -ava contiene una 5nica clase o inter7a& p5blica. +uando al,unas clases o inter7aces privadas est>n asociadas a una clase p5blica% pueden ponerse en el mismo archivo /ue la clase p5blica. (a clase o inter7a& p5blica debe ser la primera clase o inter7a& del archivo. (os archivos 7uente -ava tienen la si,uiente ordenaci$n

+omentarios de inicio Sentencias @packageA e @importA <eclaraciones de clases e inter7aces

$.1.1 Comentarios de inicio Todos los archivos 7uente deben comen&ar con un comentario en el /ue se indican el nombre de la clase% in7ormaci$n de la versi$n% 7echa% y copyri,ht
/* Nombre de la clase * * Informacin de la versin * * Fecha * * Copyright */

6!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Lr,ani&aci$n de los archivos

$.1.

,entencias pac8age e import

(a primera l9nea /ue no es un comentario de los archivos 7uente -ava es la sentencia package. <espu0s de esta% pueden se,uir varias sentencias import. .or e#emplo
package java.a t! import java.a t.peer.Canvas"eer!

!ota 3l primer componente del nombre de un pa/uete 5nico se escribe siempre en min5sculas con caracteres AS+II y debe ser uno de los nombres de dominio de 5ltimo nivel% actualmente com% edu% ,ov% mil% net% or,% o uno de los c$di,os de dos letras /ue especi7ican el pa9s como se de7ine en el est>ndar ISL 2166% 19:1. $.1.$ +eclaraciones de clases e inter7aces (a si,uiente tabla describe las partes de la declaraci$n de una clase o inter7a&% en el orden en el /ue deber9an aparecer. )ea @ 11.1 3#emplo de archivo 7uente -avaA. 2artes de la declaracin de una clase o inter7a& 1 +omentario de documentaci$n de la clase o inter7a& G/**...*/H Sentencia class o interface $ +omentario de implementaci$n de la clase o inter7a& si 7uera necesario G/*...*/H 3ste comentario debe contener cual/uier in7ormaci$n aplicable a toda la clase o inter7a& /ue no sea apropiada para estar en los comentarios de documentaci$n de la clase o inter7a&. ( )ariables de clase GstaticH .rimero las variables de clase public% despu0s las )ea @ 1.2 +omentarios de documentaci$nA para m>s in7ormaci$n sobre lo /ue debe aparecer en este comentario. !otas

protected% despu0s las de nivel de pa/uete Gsin


modi7icador de accesoH % y despu0s las private. 5 )ariables de instancia .rimero las public% despu0s las protected% despu0s las de nivel de pa/uete Gsin modi7icador de accesoH% y despu0s las private. ' ) +onstructores M0todos 3stos m0todos se deben a,rupar por 7uncionalidad m>s /ue por >mbito o accesibilidad. .or e#emplo% un m0todo de clase privado puede estar entre dos m0todos p5blicos de instancia. 3l ob#etivo es hacer el c$di,o mas le,ible y comprensible.

'!22

Indentaci$n

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

( Indentacin
Se deben emplear cuatro espacios como unidad de indentaci$n. (a construcci$n e*acta de la indentaci$n Gespacios en blanco o tabuladoresH no se especi7ica. (os tabuladores deben ser e*actamente cada : espacios Gno 8H.

(.1 9ongitud de la l:nea


3vite las l9neas de m>s de :0 caracteres ya /ue no son interpretadas correctamente por muchas terminales y herramientas. !ota (os e#emplos destinados a uso en la documentaci$n deben tener una lon,itud in7erior% ,eneralmente no m>s de '0 caracteres.

(.

;otura de l:neas

+uando una e*presi$n no entre en una l9nea debe separarla de acuerdo con los si,uientes principios

Romper despu0s de una coma. Romper antes de un operador. .re7erir roturas de alto nivel Gm>s a la derecha /ue el @padreAH /ue de ba#o nivel

Gm>s a la i&/uierda /ue el @padreAH.

Alinear la nueva l9nea con el comien&o de la e*presi$n al mismo nivel de la l9nea

anterior.

Si las re,las anteriores provocan /ue su c$di,o pare&ca con7uso o /ue 0ste se

acumule en el mar,en derecho% indente con : espacios. 3#emplos de como romper la llamada a un m0todo
un#etodo$e%presion&arga'( e%presion&arga)( e%presion&arga*( e%presion&arga+( e%presion&arga,-! var . un#etodo'$e%presion&arga'( un#etodo)$e%presion&arga)( e%presion&arga*--!

)eamos dos e#emplos de rotura de l9neas en e*presiones aritm0ticas. Se pre7iere el primero ya /ue el salto de l9nea ocurre 7uera de la e*presi$n /ue encierra los par0ntesis.
nombre&argo' . nombre&argo) * $nombre&argo* / nombre&argo+ 0 nombre&argo,/ + * nombre&argo1! // "23F32I45 nombre&argo' . nombre&argo) * $nombre&argo* / nombre&argo+ 6 nombre&argo- / + * nombre&argo1! // 37I852

A continuaci$n dos e#emplos de indentaci$n de declaraciones de m0todos. 3l primero es el caso


:!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Indentaci$n

convencional. 3l se,undo conducir9a la se,unda y la tercera l9nea demasiado hacia la i&/uierda con la indentaci$n convencional% as9 /ue en su lu,ar se usan : espacios de indentaci$n.
//IN43N85CI9N C9N73NCI9N5& un#etodo$int an5rg( 9bject another5rg( :tring yet5nother5rg( 9bject and:till5nother- ; ... < //IN43N85CI9N 43 = 3:"5CI9: "525 37I852 >25N43: IN43N85CI9N3: private static synchroni?ed metodo4eNombre#uy&argo$int un5rg( 9bject otro5rg( :tring todavia9tro5rg( 9bject un9tro#as- ; ... <

(a rotura de l9neas para sentencias if deber> se,uir ,eneralmente la re,la de los : espacios% ya /ue la indentaci$n convencional G8 espaciosH hace di79cil ver el cuerpo. .or e#emplo
//N9 @:52 3:85 IN43N85CIAN if $$condicion' BB condicion)CC $condicion* BB condicion+CCD$condicion, BB condicion1-- ; //#5&9: :5&89: hacer5lgo$-! //E5C3N 3:85 &IN35 F5CI& 43 9&7I452 < //#3F92@:52 3:85 IN43N85CIAN if $$condicion' BB condicion)CC $condicion* BB condicion+CCD$condicion, BB condicion1-- ; hacer5lgo$-! < //9 3:85 if $$condicion' BB condicion)- CC $condicion* BB condicion+CCD$condicion, BB condicion1-- ; hacer5lgo$-!

M
Hay tres 7ormas aceptables de 7ormatear e*presiones ternarias
alpha . $una&arga3%presionGooleana- H beta I gamma! alpha . $una&arga3%presionGooleana- H beta I gamma! alpha . $una&arga3%presionGooleanaH beta I gamma!

5 Comentarios
(os pro,ramas -ava pueden tener dos tipos de comentarios comentarios de implementaci$n y comentarios de documentaci$n. (os comentarios de implementaci$n son a/uellos /ue tambi0n se encuentran en +NN% delimitados por /*...*/% y //. (os comentarios de documentaci$n Gconocidos como @doc commentsAH e*isten s$lo en -ava% y se limitan por /**...*/. (os comentarios de documentaci$n se pueden e*portar a archivos HTM( con la herramienta javadoc. (os comentarios de implementaci$n son para comentar nuestro c$di,o o para comentarios acerca

9!22

+omentarios

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

de una implementaci$n en concreto. (os comentarios de documentaci$n son para describir la especi7icaci$n del c$di,o% libre de una perspectiva de implementaci$n% y para ser le9dos por desarrolladores /ue pueden no tener el c$di,o 7uente a mano. Se deben usar los comentarios para dar descripciones de c$di,o y 7acilitar in7ormaci$n adicional /ue no es le,ible en el c$di,o mismo. (os comentarios deben contener s$lo in7ormaci$n /ue es relevante para la lectura y entendimiento del pro,rama. .or e#emplo% no se debe incluir como comentario in7ormaci$n sobre c$mo se construye el pa/uete correspondiente o en /u0 directorio reside. Se podr>n tratar discusiones sobre decisiones de diseFo /ue no sean triviales u obvias% pero se debe evitar duplicar in7ormaci$n /ue est> presente Gde 7orma claraH en el c$di,o ya /ue es 7>cil /ue los comentarios redundantes se /ueden obsoletos. 3n ,eneral% evite cual/uier comentario /ue pueda /uedar obsoleto a medida /ue el c$di,o evoluciona. !ota (a 7recuencia de comentarios a veces re7le#a la escase& de calidad del c$di,o. +uando se sienta obli,ado a escribir un comentario considere reescribir el c$di,o para hacerlo m>s claro. (os comentarios no deben encerrarse en ,randes cuadrados dibu#ados con asteriscos u otros caracteres. (os comentarios nunca deben incluir caracteres especiales como @backspaceA.

5.1 <ormatos de los comentarios de implementacin


(os pro,ramas pueden tener cuatro estilos de comentarios de implementaci$n de blo/ue% de una l9nea% 7inales% y de 7in de l9nea 5.1.1 Comentarios de "lo3ue (os comentarios de blo/ue se usan para dar descripciones de archivos% m0todos% estructuras de datos y al,oritmos. (os comentarios de blo/ue se podr>n usar al comien&o de cada archivo o antes de cada m0todo. Tambi0n se pueden usar en otro lu,ares% tales como el interior de los m0todos. (os comentarios de blo/ue en el interior de una 7unci$n o m0todo deben ser indentados al mismo nivel /ue el c$di,o /ue describen. Kn comentario de blo/ue debe ir precedido por una l9nea en blanco /ue lo separe del resto del c$di,o.
/* * 5JuK hay un comentario de bloJue. */

(os comentarios de blo/ue pueden comen&ar con /*6% /ue es reconocido por indent$'- como el comien&o de un comentario de blo/ue /ue no debe ser re7ormateado. 3#emplo
/*6 * 5JuK tenemos un comentario de bloJue con cierto * formato especial Jue Juiero Jue ignore indent$'-. * * uno * dos * tres */

10!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

+omentarios

!ota= Si no se va a utili&ar indent$'-% no se deber> usar /*6 en el c$di,o o hacer nin,una otra concesi$n a la posibilidad de /ue al,uien e#ecute indent$'- sobre 0l. )0ase tambi0n @+omentarios de documentaci$nA. 5.1. Comentarios de una l:nea

.ueden aparecer comentarios cortos de una 5nica l9nea al nivel del c$di,o /ue si,ue. Si un comentario no se puede escribir en una l9nea% debe se,uir el 7ormato de los comentarios de blo/ue Gsecci$n 1.1.1H. Kn comentario de una sola l9nea debe ir precedido de una l9nea en blanco. )eamos un e#emplo de comentario de una sola l9nea en c$di,o -ava
if $condicion- ; /* Cdigo de la condicin. */ ... <

5.1.$ Comentarios 7inales .ueden aparecer comentarios muy pe/ueFos en la misma l9nea del c$di,o /ue comentan% pero lo su7icientemente ale#ados de 0l. Si aparece m>s de un comentario corto en el mismo tro&o de c$di,o% deben ser indentados con la misma pro7undidad. .or e#emplo
if $a .. )- ; return 82@3! < else ; return is"rime$a-! < /* caso especial */ /* caso general */

5.1.( Comentarios de 7in de l:nea 3l delimitador de comentario // puede convertir en comentario una l9nea completa o una parte de una l9nea. 4o debe ser usado para hacer comentarios de varias l9neas consecutivasO sin embar,o% puede usarse en l9neas consecutivas para comentar secciones de c$di,o. )eamos un e#emplo de los tres estilos
if $foo L '- ; // Eacer algo. ... < else ; return false! // 3%plicar aJuK por Jue. < //if $bar L '- ; // // // Eacer algo. // ... //< //else ; // return false! //<

5.

Comentarios de documentacin

!ota )ea @ 11.1 3#emplo de archivo 7uente -avaA para obtener e#emplos de los 7ormatos de

11!22

+omentarios

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

comentarios descritos a/u9. .ara m>s detalles% vea @Ho" to Drite <oc +omments 7or -avadocA /ue incluye in7ormaci$n de las eti/uetas de los comentarios de documentaci$n GMreturn% Mparam% MseeH en http !!#ava.sun.com!products!#dC!#avadoc!"ritin,doccomments.shtml. visite el sitio "eb de javadoc http !!#ava.sun.com!products!#dC!#avadoc! para m>s detalles acerca de los comentarios de documentaci$n y javadoc. (os comentarios de documentaci$n describen clases -ava% inter7aces% constructores% m0todos y atributos. +ada comentario de documentaci$n se encierra con los delimitadores de comentario

/**...*/% con un comentario por clase% inter7ace o miembro Gm0todo o atributoH. 3ste comentario debe
aparecer #usto antes de la declaraci$n
/** * &a clase 3jemplo ofrece ... */ public class 3jemplo ; ...

;9#ese en /ue las clases e inter7aces de alto nivel no est>n indentadas% mientras /ue sus miembros s9 lo est>n. (a primera l9nea de un comentario de documentaci$n G/**H para clases e inter7aces no est> indentada% las si,uientes l9neas tienen cada una un espacio de indentaci$n Gpara alinear los asteriscos verticalmenteH. (os miembros% incluidos los constructores% tienen cuatro espacios para la primera l9nea y 1 para las si,uientes. Si se necesita dar in7ormaci$n sobre una clase% inter7a&% variable o m0todo /ue no es apropiada para la documentaci$n% utilice un comentario de implementaci$n de blo/ue Gsecci$n 1.1.1H o de una l9nea Gsecci$n 1.1.2H para comentarlo inmediatamente despu#s de la declaraci$n. .or e#emplo% detalles de implementaci$n de una clase deben ir en un comentario de implementaci$n de blo/ue si,uiendo a la sentencia class% no en el comentario de documentaci$n de la clase. (os comentarios de documentaci$n no deben colocarse en el interior de la de7inici$n de un m0todo o constructor% ya /ue -ava asocia los comentarios de documentaci$n con la primera declaraci$n despu0s del comentario.

' +eclaraciones
'.1 Cantidad por l:nea
Se recomienda una declaraci$n por l9nea% ya /ue 7acilita los comentarios. 3n otras palabras% se pre7iere
int nivel! // nivel de indentacin int tam! // tamaNo de la tabla

antes /ue
int level( si?e!

4o pon,a di7erentes tipos en la misma l9nea. 3#emplo

12!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava int foo( fooarrayOP! //32292D

<eclaraciones

!ota (os e#emplos anteriores usan un espacio entre el tipo y el identi7icador. Kna alternativa aceptable es usar tabuladores% por e#emplo
int int 9bject level! si?e! current3ntry! // nivel de indentacin // tamaNo de la tabla // entrada de la tabla seleccionada actualmente

'.

Iniciali&acin

Intente iniciali&ar las variables locales donde se declaran. (a 5nica ra&$n para no iniciali&ar una variable donde se declara es si el valor inicial depende de c>lculos posteriores.

'.$ Colocacin
Sit5e las declaraciones solo al principio de los blo/ues Gun blo/ue es cual/uier c$di,o encerrado por llaves @PA y @MAH. 4o espere al primer uso para declararlasO puede con7undir al pro,ramador incauto y limitar la portabilidad del c$di,o dentro de su >mbito.
void my#ethod$- ; int int' . Q! if $condicion- ; int int) . Q! ... < // comien?o del bloJue del mRtodo // comien?o del bloJue del SifS

<

(a e*cepci$n a la re,la son los 9ndices de bucles for% /ue en -ava se pueden declarar en la sentencia for
for $int i . Q! i T ma%imo7ueltas! i//- ; ... <

3vite las declaraciones locales /ue oculten declaraciones de niveles superiores% por e#emplo% no declare el mismo nombre de variable en un blo/ue interno
int cuenta! ... mi#etodo$- ; if $condicion- ; int cuenta . Q! ... < ... <

// 37I852D

'.( +eclaraciones de clases e inter7aces


Al pro,ramar clases e inter7aces de -ava% se si,uen las si,uientes re,las de 7ormato

4in,5n espacio en blanco entre el nombre de un m0todo y el par0ntesis @GA /ue abre su

12!22

<eclaraciones

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

lista de par>metros

(a llave de apertura @PA aparece al 7inal de la misma l9nea de la sentencia de declaraci$n (a llave de cierre @MA empie&a una nueva l9nea indentada a#ustada a su sentencia de apertura correspondiente% e*cepto cuando no e*isten sentencias entre ambas% /ue debe aparecer inmediatamente despu0s de la de apertura @PA

class 3jemplo e%tends 9bject ; int ivar'! int ivar)! 3jemplo$int i( int j- ; ivar' . i! ivar) . j! < int metodo7acio$- ;< ...

<

(os m0todos se separan con una l9nea en blanco

) ,entencias
).1 ,entencias simples
+ada l9nea debe contener como m>*imo una sentencia. 3#emplo
argv//! argc66! argv//! argc66! // Correcto // Correcto // 37I852D

).

,entencias compuestas

(as sentencias compuestas son sentencias /ue contienen listas de sentencias encerradas entre llaves @P sentencias MA. )ea los e#emplos de las si,uientes secciones.

(as sentencias encerradas deben indentarse un nivel m>s /ue la sentencia compuesta. (a llave de apertura se debe poner al 7inal de la l9nea /ue comien&a la sentencia compuestaO la llave de cierre debe empe&ar una nueva l9nea y ser indentada al mismo nivel /ue el principio de la sentencia compuesta. (as llaves se usan en todas las sentencias% incluso las simples% cuando 7orman parte de una estructura de control% como en las sentencias if6else o for. 3sto hace m>s sencillo aFadir sentencias sin incluir accidentalmente bugs por olvidar las llaves.

).$ ,entencias de retorno


Kna sentencia return con un valor no debe usar par0ntesis a no ser /ue /ue ha,an el valor de retorno m>s obvio de al,una manera. 3#emplo
return! 18!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava return mi4isco4uro.si?e$-! return $tamanyo H tamanyo I tamanyo"or4efecto-!

Sentencias

).( ,entencias i7> i7?else> i7 else?i7 else


(a clase de sentencias if6else debe tener la si,uiente 7orma
if $condicion- ; sentencias! <

if $condicion- ; sentencias! < else ; sentencias! <

if $condicion- ; sentencia! < else if $condicion- ; sentencia! < else ; sentencia! <

!ota (as sentencias if usan siempre llaves @PMA. 3vite la si,uiente 7orma% propensa a errores
if $condicion- //37I852D 3:89 9#I83 &5: &&573: ;<D sentencia!

).5 ,entencias 7or


Kna sentencia for debe tener la si,uiente 7orma
for $iniciali?acion! condicion! actuali?acion- ; sentencias! <

Kna sentencia for vac9a Guna en la /ue todo el traba#o se hace en las cl>usulas de iniciali&aci$n% condici$n% y actuali&aci$nH debe tener la si,uiente 7orma
for $iniciali?acion! condicion! actuali?acion-!

Al usar el operador @comaA en la cl>usula de iniciali&aci$n o actuali&aci$n de una sentencia for evite la comple#idad de usar m>s de tres variables. Si es necesario utilice sentencias separadas antes de bucle for Gpara la cl>usula de iniciali&aci$nH o al 7inal del bucle Gpara la cl>usula de actuali&aci$nH.

).' ,entencias @#ile


Kna sentencia

hile debe tener la si,uiente 7orma

11!22

Sentencias hile $condicion- ; sentencias! <

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Kna sentencia "hile vac9a debe tener la si,uiente 7orma


hile $condicion-!

).) ,entencias do?@#ile


Kna sentencia do6 hile debe tener la si,uiente 7orma
do ; sentencias! < hile $condicion-!

).- ,entencias s@itc#


Kna sentencia s itch debe tener la si,uiente 7orma
s itch $condicion- ; case 5GCI sentencias! /* este caso se propaga */ case 43FI sentencias! break! case UVWI sentencias! break! defaultI sentencias! break! <

+ada ve& /ue un caso se propa,a Gno incluye la sentencia breakH% aFada un comentario donde normalmente se encontrar9a la sentencia break. 3sto se muestra en el e#emplo anterior con el comentario /* este caso se propaga */. +ada sentencia s itch debe incluir un caso @por de7ectoA GdefaultH. 3l break en el caso @por de7ectoA es redundante% pero previene /ue se propa,ue por error si lue,o se aFade otro caso.

).* ,entencias trA?catc#


Kna sentencia try6catch debe tener la si,uiente 7orma
try ; sentencias! < catch $3%ceptionClass e- ; sentencias! <

Kna sentencia try6catch puede ir se,uida de un finally% cuya e#ecuci$n se e#ecutar> independientemente de /ue el blo/ue try se haya completado con 0*ito o no.
try ; sentencias! 16!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava < catch $3%ceptionClass e- ; sentencias! < finally ; sentencias! <

Sentencias

- .spacio en "lanco
-.1 9:neas en "lanco
(as l9neas en blanco me#oran la 7acilidad de lectura separando secciones de c$di,o /ue est>n l$,icamente relacionadas. Se deben usar siempre dos l9neas en blanco en las si,uientes circunstancias

3ntre las secciones de un archivo 7uente 3ntre las de7iniciones de clases e inter7aces.
Se debe usar siempre una l9nea en blanco en las si,uientes circunstancias

3ntre m0todos 3ntre las variables locales de un m0todo y su primera sentencia Antes de un comentario de blo/ue o de un comentario de una l9nea 3ntre las distintas secciones l$,icas de un m0todo para 7acilitar la lectura.

-.

.spacios en "lanco

Se deben usar espacios en blanco en las si,uientes circunstancias

Kna palabra clave del len,ua#e se,uida por un par0ntesis debe separarse por un espacio. 3#emplo
hile $true- ; ... <

;9#ese en /ue no se debe usar un espacio en blanco entre el nombre de un m0todo y su par0ntesis de apertura. 3sto ayuda a distin,uir palabras clave de llamadas a m0todos.

<ebe aparecer un espacio en blanco despu0s de cada coma en las listas de ar,umentos. Todos los operadores binarios e*cepto @.A se deben separar de sus operandos con espacios en blanco. (os espacios en blanco no deben separar los operadores unarios% incremento G@//AH y decremento G@66AH de sus operandos. 3#emplo
a /. c / d! a . $a / b- / $c * d-! hile $d// .. s//- ; n//! < prints$Sel tamaNo es S / foo / SXnS-!

(as e*presiones en una sentencia for se deben separar con espacios en blanco. 3#emplo
for $e%pr'! e%pr)! e%pr*-

(os @CastA deben ir se,uidos de un espacio en blanco. 3#emplos


1'!22

3spacio en blanco

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

mi#etodo$$byte- unNumero( $9bject- %-! mi#etodo$$int- $cp / ,-( $$int- $i / *-- / '-!

* Convenciones de nomenclatura
(as convenciones de nomenclatura hacen /ue el c$di,o sea m>s inteli,ible al hacerlo m>s 7>cil de leer. Tambi0n pueden dar in7ormaci$n sobre la 7unci$n de un identi7icador% por e#emplo% cuando es una constante% un pa/uete o una clase% lo cual puede ser 5til para entender el c$di,o.
Tipo de identi7icador ;eglas de nomenclatura .a/uetes .jemplos

3l pre7i#o del nombre de un pa/uete se escribe siempre con com.sun.eng letras AS+II en min5sculas% y debe ser uno de los nombres de com.apple.Juicktime.v) dominio de alto nivel Gactualmente com% edu% ,ov% mil% net% edu.cmu.cs.bovik.cheese or,H o uno de los c$di,os in,leses de dos letras /ue identi7ican cada pa9s como se especi7ica en el est>ndar ISL 2166% 19:1. (os si,uientes componentes del nombre del pa/uete variar>n de acuerdo a las convenciones de nomenclatura internas de cada or,ani&aci$n. <ichas convenciones pueden especi7icar /ue al,unos nombres de los directorios correspondan a divisiones% departamentos% proyectos o m>/uinas. (os nombres de las clases deben ser sustantivos. +uando son class Cliente! compuestos tendr>n la primera letra de cada palabra /ue lo class Imagen5nimada! 7orma en may5sculas. Intente mantener los nombres de las clases simples y descriptivos. Kse palabras completas% evite acr$nimos y abreviaturas Ga no ser /ue la abreviatura sea mucho m>s conocida /ue el nombre completo% como @2& o E8#&H. (os nombres de las inter7aces si,uen la misma re,la /ue las interface clases. 9bjeto"ersistente! interface 5lmacen! (os m0todos deben ser verbos. +uando son compuestos ejecutar$-! tendr>n la primera letra en min5scula y la primera letra de las ejecutar2apido$-! si,uientes palabras /ue lo 7orma en may5scula. co,er;ondoGHO 3*cepto las constantes% todas las instancias y variables de int i! clase o m0todo empe&ar>n con min5scula. (as palabras char cO internas /ue lo 7orman Gsi son compuestasH empie&an con su float mi5nchura! primera letra en may5sculas. (os nombres de variables no deben empe&ar con los caracteres gui/n ba0o @QA o si,no de d$lar @RA% aun/ue ambos est>n permitidos por el len,ua#e. (os nombres de las variables deben ser cortos pero si,ni7icativos. (a elecci$n del nombre de una variable debe ser un mnem$nico% desi,nado para indicar a un observador ocasional su 7unci$n. (os nombres de variables de un solo car>cter se deben evitar% e*cepto para variables 9ndices temporales. 4ombres comunes para variables temporales son i( j( k( m( y n para enterosO c( d( y e para caracteres. (os nombres de las variables declaradas como constantes deben ir totalmente en may5sculas separando las palabras con un ,ui$n ba#o G@QAH. G(as constantes A4SI se deben evitar% para 7acilitar la depuraci$n.H static final int 5NCE@25Y#INI#5 . +! static final int 5NCE@25Y#5UI#5 . ZZZ! static final int C9>32Y&5YC"@ . '!

+lases

Inter7aces

M0todos

)ariables

+onstantes

1/ 01"itos de programacin
1/.1 2roporcionar acceso a varia"les de instancia A de clase
4o ha,a p5blica nin,una variable de instancia o clase sin una buena ra&$n. A menudo las variables
1:!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

H>bitos de pro,ramaci$n

de instancia no necesitan ser asi,nadas GsetH o consultadas 1get2 e*pl9citamente% esto suele suceder como e7ecto de una llamada a m0todo. Kn e#emplo de una variable de instancia p5blica apropiada es el caso en /ue la clase es esencialmente una estructura de datos% sin comportamiento. 3n otras palabras% si usara la palabra

struct en lu,ar de una clase Gsi -ava soportara structH% entonces ser9a adecuado hacer las variables de
instancia p5blicas.

1/.

;e7erencias a varia"les A m4todos de clase

3vite usar un ob#eto para acceder a una variable o m0todo de clase GstaticH. Kse el nombre de la clase en su lu,ar. .or e#emplo
metodo4eClase$-! @naClase.metodo4eClase$-! un9bjeto.metodo4eClase$-! //9[ //9[ //37I852D

1/.$ Constantes
(as constantes num0ricas GliteralesH no se deben codi7icar directamente% e*cepto =1% 0% y 1% /ue pueden aparecer en un bucle for como contadores.

1/.( Asignaciones de varia"les


3vite asi,nar el mismo valor a varias variables en la misma sentencia. 3s di79cil de leer. 3#emplo
fooGar.fChar . barFoo.lchar . \c\! // 37I852D

4o use el operador de asi,naci$n en un lu,ar donde se pueda con7undir con el de i,ualdad. 3#emplo
if $c// . d//- ; // 37I852D $Fava lo recha?a... <

se debe escribir
if $$c// . d//- D. Q- ; ... <

4o use asi,naciones embebidas como un intento de me#orar el rendimiento en tiempo de e#ecuci$n. 3se es el traba#o del compilador. 3#emplo
d . $a . b / c- / r! // 37I852D

se debe escribir
a . b / c! d . a / r!

19!22

H>bitos de pro,ramaci$n

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

1/.5 01"itos varios


1/.5.1 2ar4ntesis 3n ,eneral es una buena idea usar par0ntesis en e*presiones /ue involucran a distintos operadores para evitar problemas con el orden de precedencia de los operadores. Incluso si parece claro el orden de precedencia de los operadores podr9a no ser as9 para otros% no se debe asumir /ue otros pro,ramadores cono&can el orden de precedencia.
if $a .. b BB c .. d- // 37I852D if $$a .. b- BB $c .. d-- // C9223C89

1/.5.

Valores de retorno

Intente hacer /ue la estructura del pro,rama se a#uste a su ob#etivo. 3#emplo


if $e%presionGooleana- ; return true! < else ; return false! <

en su lu,ar se debe escribir


return e%pressionGooleana!

<el mismo modo%


if $condicion- ; return %! < return y!

se debe escribir
return $condicion H % I y-!

1/.5.$ .5presiones antes de BCD en el operador condicional Si una e*presi$n contiene un operador binario antes de @ HA en el operador ternario @HIA se debe colocar entre par0ntesis. 3#emplo
$% L. Q- H % I 6%!

1/.5.( Comentarios especiales Kse @UUUA en un comentario para indicar /ue al,o tiene al,5n error pero 7unciona. Kse @FIU#3A para indicar /ue al,o tiene al,5n error y no 7unciona.

11 .jemplo de cdigo
11.1 .jemplo de arc#ivo 7uente Java
3l si,uiente e#emplo muestra el 7ormato de archivo -ava con una sola clase p5blica. (as inter7aces
20!22

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

3#emplo de c$di,o

se 7ormatean de modo similar. )ea @ 6.8 <eclaraciones de clases e inter7acesA y @ 1.2 +omentarios de documentaci$nA.
/* * M$]-Glah.java '.=) ZZ/Q*/'= * * Copyright $c- 'ZZ+6'ZZZ :un #icrosystems( Inc. * ZQ' :an 5ntonio 2oad( "alo 5lto( California( Z+*Q*( @.:.5. * 5ll rights reserved. * * 8his soft are is the confidential and proprietary information of :un * #icrosystems( Inc. $SConfidential InformationS-. Vou shall not * disclose such Confidential Information and shall use it only in * accordance ith the terms of the license agreement you entered into * ith :un. */ package java.blah! import java.blah.blahdy.GlahGlah! /** * 5JuK va la descripcin de la clase. * * Mversion '.=) '= #ar 'ZZZ * Mauthor Firstname &astname */ public class Glah e%tends :omeClass ; /* 5JuK puede ir un comentario acerca de la implementacin de la clase. */ /** Comentario para la documentacin de class7ar' */ public static int class7ar'! /** * Comentario de la documentacin de class7ar) Jue resulta tener m^s de * una lKnea de longitud. */ private static 9bject class7ar)! /** Comentario de documentacin de instance7ar' */ public 9bject instance7ar'! /** Comentario de documentacin de protected int instance7ar)! instance7ar) */

/** Comentario de documentacin de instance7ar* */ private 9bjectOP instance7ar*! /** * ... comentario de documentacin del constructor de Glah ... */ public Glah$- ; // ...aJuK va la implementacin... < /** * ...comentario de documentacin del mRtodo do:omething... */ public void do:omething$- ; // ...aJuK va la implementacin... < /** * ... comentario de documentacin del mRtodo do:omething3lse ... * Mparam some"aram descripcin */ public void do:omething3lse$9bject some"aram- ; // ...aJuK va la implementacin... <

<

21!22

3#emplo de c$di,o

+onvenciones de c$di,o para el len,ua#e de pro,ramaci$n -ava

Convenciones del cdigo Java= CopArig#t de ,un.


.uede copiar% adaptar y redistribuir este documento para uso no comercial o para uso interno de un 7in comercial. Sin embar,o% no debe volver a publicar este documento% ni publicar o distribuir una copia de este documento en otro caso de uso /ue el no comercial o el interno sin obtener anteriormente la aprobaci$n e*presa y por escrito de Sun. Al copiar% adaptar o redistribuir este documento si,uiendo las indicaciones anteriores% est> obli,ado a conceder el cr0dito a Sun. Si reproduce o distribuye el documento sin nin,una modi7icaci$n sustancial en su contenido% use la si,uiente l9nea de cr0dito
Copyright 'ZZ,6'ZZZ :un #icrosystems( Inc. 5ll rights reserved. @sed by permission.

Si modi7ica este documento de 7orma /ue altera su si,ni7icado% por e#emplo% para se,uir las convenciones propias de su empresa% usa la si,uiente l9nea de cr0ditos
5dapted ith permission from F575 C943 C9N73N8I9N:. Copyright 'ZZ,6'ZZZ :un #icrosystems( Inc. 5ll rights reserved.

3n ambos casos aFada un enlace de hiperte*to u otra re7erencia al sitio "eb de las convenciones de c$di,o de -ava http !!#ava.sun.com!docs!codeconv!

Convenciones del cdigo Java= CopArig#t de la traduccin de java0ispano.


Se puede y se debe aplicar a esta traducci$n las mismas condiciones de licencia /ue al ori,inal de Sun en lo re7erente a uso% modi7icaci$n y redistribuci$n. Si distribuyes esta traducci$n Gaun/ue sea con otro 7ormato de estiloH estas obli,ado a dar cr0ditos a #avaHispano por la traducci$n indic>ndolo con la si,uientes l9neas
5dapted ith permission from F575 C943 C9N73N8I9N:. Copyright 'ZZ,6'ZZZ :un #icrosytems( Inc. 5ll rights reserved. Copyright )QQ' .javaEispano.com. 8odos los derechos reservados. 9torgados derechos de copia y redistribucin para uso interno y no comercial.

Asimismo% aun/ue no se re/uiere% se a,radecer> /ue incluya un enlace al sitio "eb de #avaHispano http !!""".#avaHispano.com

22!22

También podría gustarte