Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Convenciones Codigo Java
Convenciones Codigo Java
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
2!22
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
'.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
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
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!22
4ombres de archivo
!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
$.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
$.1.
(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
'!22
Indentaci$n
( 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.
(.
;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
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
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
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.
(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
+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
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!
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
4in,5n espacio en blanco entre el nombre de un m0todo y el par0ntesis @GA /ue abre su
12!22
<eclaraciones
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$- ;< ...
<
) ,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.
+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
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!
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.
11!22
+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.
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
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*-
3spacio en blanco
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
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/.
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.
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
1/.5.
Valores de retorno
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
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
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!
Asimismo% aun/ue no se re/uiere% se a,radecer> /ue incluya un enlace al sitio "eb de #avaHispano http !!""".#avaHispano.com
22!22