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 Convenciones de escritura de cdigo del lenguaje de programacin Java +,-. 2!22 Convenciones de escritura de cdigo del lenguaje de programacin Java 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 .u/ convenciones de c$di-o................................................................................................... ...0 1.2 A-radecimientos......................................................................................................................... .....0 1.1 Sobre la traducci$n...................................................................................................................... ....0 !om"res de arc#ivo..........................................................................................................5 2.1 2*tensiones de los archivos................................................................................................... ..........0 2.2 3ombres de archivo com4nes............................................................................ .............................5 $ %rgani&acin de los arc#ivos.............................................................................................' 1.1 Archivos de c$di-o 6uente 7ava.............................................................................................. ..........5 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.....................................................................................................................* 0.1 ;ormatos de los comentarios de implementaci$n............................................................... ...........10 .1.1 Comentarios de !lo"ue...................................................................................................... ....1# .1.2 Comentarios de una l$nea........................................................................................... ...........11 .1.3 Comentarios finales.................................................................................................... ...........11 .1.% Comentarios de fin de l$nea...................................................................................... .............11 0.2 <omentarios de documentaci$n............................................................................ ........................11 ' +eclaraciones.................................................................................................................1 5.1 <antidad por l9nea................................................................................................. ........................12 5.2 Iniciali&aci$n................................................................................................................... ...............11 5.1 <olocaci$n..................................................................................................................... ................11 5.8 =eclaraciones de clases e inter6aces........................................................................ .....................11 ) ,entencias.....................................................................................................................1( '.1 Sentencias simples........................................................................................................ ................18 '.2 Sentencias compuestas................................................................................................ .................18 '.1 Sentencias de retorno................................................................................................................. ...18 '.8 Sentencias i6% i6>else% i6 else>i6 else................................................................................. ................18 +,-. 1!22 Convenciones de escritura de cdigo del lenguaje de programacin Java '.0 Sentencias 6or............................................................................................................................ ....10 '.5 Sentencias "hile.................................................................................................................... ........10 '.' Sentencias do>"hile............................................................................................................... ........15 '.: Sentencias s"itch............................................................................................................ ..............15 '.9 Sentencias try>catch......................................................................................................... .............15 - .spacio en "lanco...........................................................................................................1) :.1 (9neas en blanco.................................................................................................................... ........1' :.2 2spacios en blanco................................................................................................... .....................1' * Convenciones de nomenclatura.......................................................................................1- 1/ 01"itos de programacin..............................................................................................1- 10.1 +roporcionar acceso a variables de instancia y de clase................................................... ...........1: 10.2 Re6erencias a variables y m/todos de clase.................................................... ............................19 10.1 <onstantes...................................................................................................... ............................19 10.8 Asi-naciones de variables.......................................................................................................... ..19 10.0 H,bitos varios...................................................................................................................... ........19 1#..1 &ar'ntesis....................................................................................................................... .....1( 1#..2 )alores de retorno.................................................................................................. .............2# 1#..3 *+presiones antes de ,-. en el operador condicional.................................................. ........2# 1#..% Comentarios especiales............................................................................................. ..........2# 11 .jemplo de cdigo........................................................................................................./ 11.1 2#emplo de archivo 6uente 7ava.................................................................................................. ..20 +,-. 8!22 Convenciones de escritura de cdigo del lenguaje de programacin Java 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 2l :0? del coste del c$di-o de un pro-rama va a su mantenimiento. <asi nin-4n so6t"are lo mantiene toda su vida el auto ori-inal. (as convenciones de c$di-o me#oran la lectura del so6t"are% permitiendo entender c$di-o nuevo mucho m,s r,pidamente y m,s a 6ondo. Si distribuye su c$di-o 6uente como un producto% necesita ase-urarse de .ue est, bien hecho y presentado como cual.uier otro producto. +ara .ue 6uncionen las convenciones% cada persona .ue escribe so6t"are debe se-uir la convenci$n. /odos. 1. Agradecimientos 2ste documento re6le#a los est,ndares de codi6icaci$n del len-ua#e 7ava presentados en @Java 0anguage SpecificationA% de Sun Microsystems% Inc. (os mayores contribuidores son +eter Bin-% +atricC 3au-hton% MiCe =eMoney% 7onni Banerva% Bathy Dalrath% y Scott Hommel. 2ste documento es mantenido por Scott Hommel. 2nv9e sus comentarios a shommelEen-.sun.com 1.$ ,o"re la traduccin 2ste 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 6omentar el uso y conocimiento del len-ua#e 7ava dentro del mundo hispanoparlante. Se ha intentado hacer una traducci$n lo m,s literal posible% y esta es la 4nica 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. 2ste documento ha sido revisado y corre-ido en mar&o de 200' por (ucas )ieites G""".code*ion.comH . !om"res de arc#ivo 2sta secci$n enumera las e*tensiones y los nombres de archivo m,s usados . .1 .5tensiones de los arc#ivos 2l so6t"are 7ava usa las si-uientes e*tensiones para sus archivos Tipo de arc#ivo .5tensin +,-. 0!22 Convenciones de escritura de cdigo del lenguaje de programacin Java <$di-o #ava .#ava Iytecode de #ava .class . !om"res de arc#ivo com6nes 2ntre los nombres de archivo m,s utili&ados se encuentran !om"re de arc#ivo 7so J3KmaCe6ile 2l nombre pre6erido para un archivo @makeA. Ksamos gnumake para construir nuestro so6t"are. R2A=M2 2l nombre pre6erido para el archivo .ue resume los contenidos de un directorio en concreto. $ %rgani&acin de los arc#ivos Kn archivo est, 6ormado por secciones .ue deben estar separadas por l9neas en blanco y comentarios opcionales .ue identi6ican 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 7ava debidamente 6ormateado% vea @ 11.1 2#emplo de archivo 6uente 7avaA. $.1 Arc#ivos de cdigo 8uente Java <ada archivo 6uente 7ava contiene una 4nica clase o inter6a& p4blica. <uando al-unas clases o inter6aces privadas est,n asociadas a una clase p4blica% pueden ponerse en el mismo archivo .ue la clase p4blica. (a clase o inter6a& p4blica debe ser la primera clase o inter6a& del archivo. (os archivos 6uente 7ava tienen la si-uiente ordenaci$n <omentarios de inicio Sentencias @packageA e @importA =eclaraciones de clases e inter6aces $.1.1 Comentarios de inicio Todos los archivos 6uente deben comen&ar con un comentario en el .ue se indican el nombre de la clase% in6ormaci$n de la versi$n% 6echa% y copyri-ht /* Nombre de la clase * * Informacin de la versin * * Fecha * * Copyright */ +,-. 5!22 Convenciones de escritura de cdigo del lenguaje de programacin Java $.1. ,entencias pac9age e import (a primera l9nea .ue no es un comentario de los archivos 6uente 7ava es la sentencia package. =espu/s de esta% pueden se-uir varias sentencias import. +or e#emplo package java.at! import java.at.peer.Canvas"eer! !ota 2l primer componente del nombre de un pa.uete 4nico se escribe siempre en min4sculas con caracteres AS<II y debe ser uno de los nombres de dominio de 4ltimo nivel% actualmente com% edu% -ov% mil% net% or-% o uno de los c$di-os de dos letras .ue especi6ican el pa9s como se de6ine en el est,ndar ISL 1155% 19:1. $.1.$ +eclaraciones de clases e inter8aces (a si-uiente tabla describe las partes de la declaraci$n de una clase o inter6a&% en el orden en el .ue deber9an aparecer. )ea @ 11.1 2#emplo de archivo 6uente 7avaA. 2artes de la declaracin de una clase o inter8a& !otas 1 <omentario de documentaci$n de la clase o inter6a& G/**...*/H )ea @ 0.2 <omentarios de documentaci$nA para m,s in6ormaci$n sobre lo .ue debe aparecer en este comentario.
Sentencia class o interface
$ <omentario de implementaci$n de la clase o inter6a& si 6uera necesario G/*...*/H 2ste comentario debe contener cual.uier in6ormaci$n aplicable a toda la clase o inter6a& .ue no sea apropiada para estar en los comentarios de documentaci$n de la clase o inter6a&. ( )ariables de clase GstaticH +rimero las variables de clase public% despu/s las protected% despu/s las de nivel de pa.uete Gsin modi6icador de accesoH % y despu/s las private. 5 )ariables de instancia +rimero las public% despu/s las protected% despu/s las de nivel de pa.uete Gsin modi6icador de accesoH% y despu/s las private. ' <onstructores ) M/todos 2stos m/todos se deben a-rupar por 6uncionalidad m,s .ue por ,mbito o accesibilidad. +or e#emplo% un m/todo de clase privado puede estar entre dos m/todos p4blicos de instancia. 2l ob#etivo es hacer el c$di-o mas le-ible y comprensible. ( 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 especi6ica. (os tabuladores deben ser e*actamente cada : espacios Gno 8H. +,-. '!22 Convenciones de escritura de cdigo del lenguaje de programacin Java (.1 :ongitud de la l;nea 2vite 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 in6erior% -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 despu/s de una coma. Romper antes de un operador. +re6erir 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 con6uso o .ue /ste se acumule en el mar-en derecho% indente con : espacios. 2#emplos de como romper la llamada a un m/todo 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 aritm/ticas. Se pre6iere el primero ya .ue el salto de l9nea ocurre 6uera de la e*presi$n .ue encierra los par/ntesis. 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 m/todos. 2l primero es el caso convencional. 2l 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- ; ... < +,-. :!22 Convenciones de escritura de cdigo del lenguaje de programacin Java //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 di69cil ver el cuerpo. +or e#emplo //N9 @:52 3:85 IN43N85CI9N if $$condicion' AA condicion)- BB $condicion* AA condicion+- BBC$condicion, AA condicion1-- ; //#5&9: :5&89: hacer5lgo$-! //D5C3N 3:85 &IN35 F5CI& 43 9&7I452 < //@:3 8DI: IN43N858I9N IN:8354 if $$condicion' AA condicion)- BB $condicion* AA condicion+- BBC$condicion, AA condicion1-- ; hacer5lgo$-! < //9 @:52 3:85 if $$condicion' AA condicion)- BB $condicion* AA condicion+- BBC$condicion, AA condicion1-- ; hacer5lgo$-! M Hay tres 6ormas aceptables de 6ormatear e*presiones ternarias alpha . $una&arga3%presionEooleana- F beta G gamma! alpha . $una&arga3%presionEooleana- F beta G gamma! alpha . $una&arga3%presionEooleana- F beta G gamma! 5 Comentarios (os pro-ramas 7ava pueden tener dos tipos de comentarios comentarios de implementaci$n y comentarios de documentaci$n. (os comentarios de implementaci$n son a.uellos .ue tambi/n se encuentran en <NN% delimitados por /*...*/% y //. (os comentarios de documentaci$n Gconocidos como @doc commentsAH e*isten s$lo en 7ava% 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 de una implementaci$n en concreto. (os comentarios de documentaci$n son para describir la especi6icaci$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 6uente a mano. Se deben usar los comentarios para dar descripciones de c$di-o y 6acilitar in6ormaci$n adicional .ue no es le-ible en el c$di-o mismo. (os comentarios deben contener s$lo in6ormaci$n .ue es relevante +,-. 9!22 Convenciones de escritura de cdigo del lenguaje de programacin Java para la lectura y entendimiento del pro-rama. +or e#emplo% no se debe incluir como comentario in6ormaci$n sobre c$mo se construye el pa.uete correspondiente o en .u/ directorio reside. Se podr,n tratar discusiones sobre decisiones de diseFo .ue no sean triviales u obvias% pero se debe evitar duplicar in6ormaci$n .ue est, presente Gde 6orma claraH en el c$di-o ya .ue es 6,cil .ue los comentarios redundantes se .ueden obsoletos. 2n -eneral% evite cual.uier comentario .ue pueda .uedar obsoleto a medida .ue el c$di-o evoluciona. !ota (a 6recuencia de comentarios a veces re6le#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 @!ackspaceA. 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% 6inales% y de 6in de l9nea 5.1.1 Comentarios de "lo3ue (os comentarios de blo.ue se usan para dar descripciones de archivos% m/todos% 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 m/todo. Tambi/n se pueden usar en otro lu-ares% tales como el interior de los m/todos. (os comentarios de blo.ue en el interior de una 6unci$n o m/todo 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. /* * 5HuI hay un comentario de bloHue. */ (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 re6ormateado. 2#emplo /*6 * 5HuI tenemos un comentario de bloHue con cierto * formato especial Hue Huiero Hue ignore indent$'-. * * uno * dos * tres */ !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 /l. )/ase tambi/n @<omentarios de documentaci$nA. +,-. 10!22 Convenciones de escritura de cdigo del lenguaje de programacin Java 5.1. Comentarios de una l;nea +ueden aparecer comentarios cortos de una 4nica l9nea al nivel del c$di-o .ue si-ue. Si un comentario no se puede escribir en una l9nea% debe se-uir el 6ormato de los comentarios de blo.ue Gsecci$n 0.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 7ava if $condicion- ; /* Cdigo de la condicin. */ ... < 5.1.$ Comentarios 8inales +ueden aparecer comentarios muy pe.ueFos en la misma l9nea del c$di-o .ue comentan% pero lo su6icientemente ale#ados de /l. Si aparece m,s de un comentario corto en el mismo tro&o de c$di-o% deben ser indentados con la misma pro6undidad. +or e#emplo if $a .. )- ; return 82@3! /* caso especial */ < else ; return is"rime$a-! /* caso general */ < 5.1.( Comentarios de 8in de l;nea 2l delimitador de comentario // puede convertir en comentario una l9nea completa o una parte de una l9nea. 3o 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 J '- ; // Dacer algo. ... < else ; return false! // 3%plicar aHuI por Hue. < //if $bar J '- ; // // // Dacer algo. // ... //< //else ; // return false! //< 5. Comentarios de documentacin !ota )ea @ 11.1 2#emplo de archivo 6uente 7avaA para obtener e#emplos de los 6ormatos de comentarios descritos a.u9. +ara m,s detalles% vea @Ho" to Drite =oc <omments 6or 7avadocA .ue incluye in6ormaci$n de las eti.uetas de los comentarios de documentaci$n GKreturn% Kparam% KseeH 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 +,-. 11!22 Convenciones de escritura de cdigo del lenguaje de programacin Java de los comentarios de documentaci$n y javadoc. (os comentarios de documentaci$n describen clases 7ava% inter6aces% constructores% m/todos y atributos. <ada comentario de documentaci$n se encierra con los delimitadores de comentario /**...*/% con un comentario por clase% inter6ace o miembro Gm/todo o atributoH. 2ste comentario debe aparecer #usto antes de la declaraci$n /** * &a clase 3jemplo ofrece ... */ public class 3jemplo ; ... ;9#ese en .ue las clases e inter6aces 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 inter6aces 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 0 para las si-uientes. Si se necesita dar in6ormaci$n sobre una clase% inter6a&% variable o m/todo .ue no es apropiada para la documentaci$n% utilice un comentario de implementaci$n de blo.ue Gsecci$n 0.1.1H o de una l9nea Gsecci$n 0.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 de6inici$n de un m/todo o constructor% ya .ue 7ava asocia los comentarios de documentaci$n con la primera declaraci$n despu/s del comentario. ' +eclaraciones '.1 Cantidad por l;nea Se recomienda una declaraci$n por l9nea% ya .ue 6acilita los comentarios. 2n otras palabras% se pre6iere int nivel! // nivel de indentacin int tam! // tamaLo de la tabla antes .ue int level( si?e! 3o pon-a di6erentes tipos en la misma l9nea. 2#emplo int foo( fooarrayMN! //32292C !ota (os e#emplos anteriores usan un espacio entre el tipo y el identi6icador. Kna alternativa aceptable es usar tabuladores% por e#emplo int level! // nivel de indentacin int si?e! // tamaLo de la tabla +,-. 12!22 Convenciones de escritura de cdigo del lenguaje de programacin Java 9bject current3ntry! // entrada de la tabla seleccionada actualmente '. Iniciali&acin Intente iniciali&ar las variables locales donde se declaran. (a 4nica ra&$n para no iniciali&ar una variable donde se declara es si el valor inicial depende de c,lculos posteriores. '.$ Colocacin Sit4e las declaraciones solo al principio de los blo.ues Gun blo.ue es cual.uier c$di-o encerrado por llaves @PA y @MAH. 3o espere al primer uso para declararlasO puede con6undir al pro-ramador incauto y limitar la portabilidad del c$di-o dentro de su ,mbito. void my#ethod$- ; int int' . O! // comien?o del bloHue del mPtodo if $condition- ; int int) . O! // comien?o del bloHue del QifQ ... < < (a e*cepci$n a la re-la son los 9ndices de bucles for% .ue en 7ava se pueden declarar en la sentencia for for $int i . O! i R ma%imo7ueltas! i//- ; ... < 2vite 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 . O! // 37I852C ... < ... < '.( +eclaraciones de clases e inter8aces Al pro-ramar clases e inter6aces de 7ava% se si-uen las si-uientes re-las de 6ormato 3in-4n espacio en blanco entre el nombre de un m/todo y el par/ntesis @GA .ue abre su lista de par,metros (a llave de apertura @PA aparece al 6inal 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 despu/s de la de apertura @PA +,-. 11!22 Convenciones de escritura de cdigo del lenguaje de programacin Java class 3jemplo e%tends 9bject ; int ivar'! int ivar)! 3jemplo$int i( int j- ; ivar' . i! ivar) . j! < int metodo7acio$- ;< ... < (os m/todos se separan con una l9nea en blanco ) ,entencias ).1 ,entencias simples <ada l9nea debe contener como m,*imo una sentencia. 2#emplo argv//! // Correcto argc66! // Correcto argv//! argc66! // 37I852C ). ,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 6inal 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 6orman parte de una estructura de control% como en las sentencias if6else o for. 2sto hace m,s sencillo aFadir sentencias sin incluir accidentalmente !ugs por olvidar las llaves. ).$ ,entencias de retorno Kna sentencia return con un valor no debe usar par/ntesis a no ser .ue .ue ha-an el valor de retorno m,s obvio de al-una manera. 2#emplo return! return mi4isco4uro.si?e$-! return $tamanyo F tamanyo G tamanyo"or4efecto-! ).( ,entencias i8? i8@else? i8 else@i8 else (a clase de sentencias if6else debe tener la si-uiente 6orma if $condicion- ; +,-. 18!22 Convenciones de escritura de cdigo del lenguaje de programacin Java sentencias! < if $condicion- ; sentencias! < else ; sentencias! < if $condicion- ; sentencia! < else if $condicion- ; sentencia! < else ; sentencia! < !ota (as sentencias if usan siempre llaves @PMA. 2vite la si-uiente 6orma% propensa a errores if $condicion- //37I852C 3:89 9#I83 &5: &&573: ;<C sentencia! ).5 ,entencias 8or Kna sentencia for debe tener la si-uiente 6orma 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 6orma 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 6inal del bucle Gpara la cl,usula de actuali&aci$nH. ).' ,entencias A#ile Kna sentencia hile debe tener la si-uiente 6orma hile $condicion- ; sentencias! < Kna sentencia "hile vac9a debe tener la si-uiente 6orma hile $condicion-! +,-. 10!22 Convenciones de escritura de cdigo del lenguaje de programacin Java ).) ,entencias do@A#ile Kna sentencia do6hile debe tener la si-uiente 6orma do ; sentencias! < hile $condicion-! ).- ,entencias sAitc# Kna sentencia sitch debe tener la si-uiente 6orma sitch $condicion- ; case 5ECG sentencias! /* este caso se propaga */ case 43FG sentencias! break! case STUG sentencias! break! defaultG 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. 2sto se muestra en el e#emplo anterior con el comentario /* este caso se propaga */. <ada sentencia sitch debe incluir un caso @por de6ectoA GdefaultH. 2l break en el caso @por de6ectoA es redundante% pero previene .ue se propa-ue por error si lue-o se aFade otro caso. ).* ,entencias trB@catc# Kna sentencia try6catch debe tener la si-uiente 6orma 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 /*ito o no. try ; sentencias! < catch $3%ceptionClass e- ; sentencias! < finally ; sentencias! < +,-. 15!22 Convenciones de escritura de cdigo del lenguaje de programacin Java - .spacio en "lanco -.1 :;neas en "lanco (as l9neas en blanco me#oran la 6acilidad 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 2ntre las secciones de un archivo 6uente 2ntre las de6iniciones de clases e inter6aces. Se debe usar siempre una l9nea en blanco en las si-uientes circunstancias 2ntre m/todos 2ntre las variables locales de un m/todo y su primera sentencia Antes de un comentario de blo.ue o de un comentario de una l9nea 2ntre las distintas secciones l$-icas de un m/todo para 6acilitar 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 par/ntesis debe separarse por un espacio. 2#emplo hile $true- ; ... < ;9#ese en .ue no se debe usar un espacio en blanco entre el nombre de un m/todo y su par/ntesis de apertura. 2sto ayuda a distin-uir palabras clave de llamadas a m/todos. =ebe aparecer un espacio en blanco despu/s 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. 2#emplo a /. c / d! a . $a / b- / $c * d-! hile $d// .. s//- ; n//! < prints$Qel tamaLo es Q / foo / QVnQ-! (as e*presiones en una sentencia for se deben separar con espacios en blanco. 2#emplo for $e%pr'! e%pr)! e%pr*- (os @CastA deben ir se-uidos de un espacio en blanco. 2#emplos mi#etodo$$byte- unNumero( $9bject- %-! mi#etodo$$int- $cp / ,-( $$int- $i / *-- / '-! +,-. 1'!22 Convenciones de escritura de cdigo del lenguaje de programacin Java * Convenciones de nomenclatura (as convenciones de nomenclatura hacen .ue el c$di-o sea m,s inteli-ible al hacerlo m,s 6,cil de leer. Tambi/n pueden dar in6ormaci$n sobre la 6unci$n de un identi6icador% por e#emplo% cuando es una constante% un pa.uete o una clase% lo cual puede ser 4til para entender el c$di-o. Tipo de identi8icador <eglas de nomenclatura .jemplos +a.uetes 2l pre6i#o del nombre de un pa.uete se escribe siempre con letras AS<II en min4sculas% y debe ser uno de los nombres de dominio de alto nivel Gactualmente com% edu% -ov% mil% net% or-H o uno de los c$di-os in-leses de dos letras .ue identi6ican cada pa9s como se especi6ica en el est,ndar ISL 1155% 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 especi6icar .ue al-unos nombres de los directorios correspondan a divisiones% departamentos% proyectos o m,.uinas. com.sun.eng com.apple.Huicktime.v) edu.cmu.cs.bovik.cheese <lases (os nombres de las clases deben ser sustantivos. <uando son compuestos tendr,n la primera letra de cada palabra .ue lo 6orma en may4sculas. 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 D8#&H. class Cliente! class Imagen5nimada! Inter6aces (os nombres de las inter6aces si-uen la misma re-la .ue las clases. interface 9bjeto"ersistente! interface 5lmacen! M/todos (os m/todos deben ser verbos. <uando son compuestos tendr,n la primera letra en min4scula y la primera letra de las si-uientes palabras .ue lo 6orma en may4scula. ejecutar$-! ejecutar2apido$-! co-er;ondoGHO )ariables 2*cepto las constantes% todas las instancias y variables de clase o m/todo empe&ar,n con min4scula. (as palabras internas .ue lo 6orman Gsi son compuestasH empie&an con su primera letra en may4sculas. (os nombres de variables no deben empe&ar con los caracteres guin !ajo @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-ni6icativos. (a elecci$n del nombre de una variable debe ser un mnem$nico% desi-nado para indicar a un observador ocasional su 6unci$n. (os nombres de variables de un solo car,cter se deben evitar% e*cepto para variables 9ndices temporales. 3ombres comunes para variables temporales son i( j( k( m( y n para enterosO c( d( y e para caracteres. int i! char cO float mi5nchura! <onstantes (os nombres de las variables declaradas como constantes deben ir totalmente en may4sculas separando las palabras con un -ui$n ba#o G@QAH. G(as constantes A3SI se deben evitar% para 6acilitar la depuraci$n.H static final int 5NCD@25W#INI#5 . +! static final int 5NCD@25W#5SI#5 . XXX! static final int C9>32W&5WC"@ . '! 1/ 01"itos de programacin 1/.1 2roporcionar acceso a varia"les de instancia B de clase 3o ha-a p4blica nin-una variable de instancia o clase sin una buena ra&$n. A menudo las variables de instancia no necesitan ser asi-nadas GsetH o consultadas 1get2 e*pl9citamente% esto suele suceder como e6ecto de una llamada a m/todo. Kn e#emplo de una variable de instancia p4blica apropiada es el caso en .ue la clase es +,-. 1:!22 Convenciones de escritura de cdigo del lenguaje de programacin Java esencialmente una estructura de datos% sin comportamiento. 2n otras palabras% si usara la palabra struct en lu-ar de una clase Gsi 7ava soportara structH% entonces ser9a adecuado hacer las variables de instancia p4blicas. 1/. <e8erencias a varia"les B m4todos de clase 2vite usar un ob#eto para acceder a una variable o m/todo de clase GstaticH. Kse el nombre de la clase en su lu-ar. +or e#emplo metodo4eClase$-! //9Y @naClase.metodo4eClase$-! //9Y un9bjeto.metodo4eClase$-! //37I852C 1/.$ Constantes (as constantes num/ricas GliteralesH no se deben codi6icar directamente% e*cepto >1% 0% y 1% .ue pueden aparecer en un bucle for como contadores. 1/.( Asignaciones de varia"les 2vite asi-nar el mismo valor a varias variables en la misma sentencia. 2s di69cil de leer. 2#emplo fooEar.fChar . barFoo.lchar . ZcZ! // 37I852C 3o use el operador de asi-naci$n en un lu-ar donde se pueda con6undir con el de i-ualdad. 2#emplo if $c// . d//- ; // 37I852C $[ava lo recha?a- ... < se debe escribir if $$c// . d//- C. O- ; ... < 3o use asi-naciones embebidas como un intento de me#orar el rendimiento en tiempo de e#ecuci$n. 2se es el traba#o del compilador. 2#emplo d . $a . b / c- / r! // 37I852C se debe escribir a . b / c! d . a / r! 1/.5 01"itos varios 1/.5.1 2ar4ntesis 2n -eneral es una buena idea usar par/ntesis 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. +,-. 19!22 Convenciones de escritura de cdigo del lenguaje de programacin Java if $a .. b AA c .. d- // 37I852C if $$a .. b- AA $c .. d-- // C9223C89 1/.5. Valores de retorno Intente hacer .ue la estructura del pro-rama se a#uste a su ob#etivo. 2#emplo if $e%presionEooleana- ; return true! < else ; return false! < en su lu-ar se debe escribir return e%pressionEooleana! =el mismo modo% if $condicion- ; return %! < return y! se debe escribir return $condicion F % G y-! 1/.5.$ .5presiones antes de CDE en el operador condicional Si una e*presi$n contiene un operador binario antes de @FA en el operador ternario @FGA se debe colocar entre par/ntesis. 2#emplo $% J. O- F % G 6%! 1/.5.( Comentarios especiales Kse @SSSA en un comentario para indicar .ue al-o tiene al-4n error pero 6unciona. Kse @FIS#3A para indicar .ue al-o tiene al-4n error y no 6unciona. 11 .jemplo de cdigo 11.1 .jemplo de arc#ivo 8uente Java 2l si-uiente e#emplo muestra el 6ormato de archivo 7ava con una sola clase p4blica. (as inter6aces se 6ormatean de modo similar. )ea @ 5.8 =eclaraciones de clases e inter6acesA y @ 0.2 <omentarios de documentaci$nA. /* * K$\-Elah.java '.=) XX/O*/'= * * Copyright $c- 'XX+6'XXX :un #icrosystems( Inc. * XO' :an 5ntonio 2oad( "alo 5lto( California( X+*O*( @.:.5. * 5ll rights reserved. * * 8his softare is the confidential and proprietary information of :un * #icrosystems( Inc. $QConfidential InformationQ-. Tou shall not * disclose such Confidential Information and shall use it only in * accordance ith the terms of the license agreement you entered into +,-. 20!22 Convenciones de escritura de cdigo del lenguaje de programacin Java * ith :un. */ package java.blah! import java.blah.blahdy.ElahElah! /** * 5HuI va la descripcin de la clase. * * Kversion '.=) '= #ar 'XXX * Kauthor Firstname &astname */ public class Elah e%tends :omeClass ; /* 5HuI 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) Hue resulta tener m]s de * una lInea de longitud. */ private static 9bject class7ar)! /** Comentario de documentacin de instance7ar' */ public 9bject instance7ar'! /** Comentario de documentacin de instance7ar) */ protected int instance7ar)! /** Comentario de documentacin de instance7ar* */ private 9bjectMN instance7ar*! /** * ... comentario de documentacin del constructor de Elah ... */ public Elah$- ; // ...aHuI va la implementacin... < /** * ...comentario de documentacin del mPtodo do:omething... */ public void do:omething$- ; // ...aHuI va la implementacin... < /** * ... comentario de documentacin del mPtodo do:omething3lse ... * Kparam some"aram descripcin */ public void do:omething3lse$9bject some"aram- ; // ...aHuI va la implementacin... < < +,-. 21!22 Convenciones de escritura de cdigo del lenguaje de programacin Java Convenciones del cdigo Java> CopBrig#t de ,un. +uede copiar% adaptar y redistribuir este documento para uso no comercial o para uso interno de un 6in 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 cr/dito a Sun. Si reproduce o distribuye el documento sin nin-una modi6icaci$n sustancial en su contenido% use la si-uiente l9nea de cr/dito Copyright 'XX,6'XXX :un #icrosystems( Inc. 5ll rights reserved. @sed by permission. Si modi6ica este documento de 6orma .ue altera su si-ni6icado% por e#emplo% para se-uir las convenciones propias de su empresa% usa la si-uiente l9nea de cr/ditos 5dapted ith permission from [575 C943 C9N73N8I9N:. Copyright 'XX,6'XXX :un #icrosystems( Inc. 5ll rights reserved. 2n ambos casos aFada un enlace de hiperte*to u otra re6erencia al sitio "eb de las convenciones de c$di-o de 7ava http!!#ava.sun.com!docs!codeconv! Convenciones del cdigo Java> CopBrig#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 re6erente a uso% modi6icaci$n y redistribuci$n. Si distribuyes esta traducci$n Gaun.ue sea con otro 6ormato de estiloH estas obli-ado a dar cr/ditos a #avaHispano por la traducci$n indic,ndolo con la si-uientes l9neas 5dapted ith permission from [575 C943 C9N73N8I9N:. Copyright 'XX,6'XXX :un #icrosytems( Inc. 5ll rights reserved. Copyright )OO' .javaDispano.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