cosas de ts

Upload: centipado

Post on 08-Jul-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Cosas de TS

    1/154

  • 8/19/2019 Cosas de TS

    2/154

    ámb

     Yo: TypeScript

    J.C. Lama

    1

  • 8/19/2019 Cosas de TS

    3/154

    Esta página se ha dejado en blanco intencionalmente.

    3

  • 8/19/2019 Cosas de TS

    4/154

    http://creativecommons.org/licenses/by-sa/3./es/

    !

    http://creativecommons.org/licenses/by-sa/3.0/es/http://creativecommons.org/licenses/by-sa/3.0/es/

  • 8/19/2019 Cosas de TS

    5/154

    Jos" Carlos Lama #once

    #rimera edici$n: oct%bre !1&

    'ersi$n (ype)cript: 1.1..1

    &

  • 8/19/2019 Cosas de TS

    6/154

     A mis padres, mis hermanos y mi pareja.

    *

  • 8/19/2019 Cosas de TS

    7/154

    Esta página se ha dejado en blanco intencionalmente.

    +

  • 8/19/2019 Cosas de TS

    8/154

    Esta página se ha dejado en blanco intencionalmente.

    1

  • 8/19/2019 Cosas de TS

    9/154

    0. INTRODUCCIÓN.....................................................................................12

    0.1 ¿A QUIÉN VA DIRIGIDO ESTE LIBRO..............................................................................1!0.! "AVAS#RI$T..............................................................................................................1!

    0.2.1 Historia.........................................................................................................120.2.2 Ámbito de ejecución.....................................................................................12

    0.2.3 Compatibilidad con navegadores..................................................................130.% T Y$ES#RI$T.............................................................................................................1%

    0.3.1 ¿Por qu !"pe#ript$......................................................................................130.3.2 %u es " no es !"pe#cript.............................................................................130.3.3 !# es .........................................................................................................1'0.3.' (equisitos.....................................................................................................1'

    1. GENERALIDADES...................................................................................16

    1.1 SENTEN#IAS.............................................................................................................1&1.! SENSIBLE A LAS 'AY(S#ULAS......................................................................................1&1.% $ALABRAS RESERVADAS..............................................................................................1&1.) UNI#ODE.................................................................................................................1&1.* #O'ENTARIOS..........................................................................................................1&

    2. CÓMO EMPEZAR....................................................................................18

    !.1 INTRODU##I+N.........................................................................................................1,!.! EDITORES................................................................................................................1-!.% DIVIDIR EL $ROYE#TO.................................................................................................!1!.) LIBRERAS E/TERNAS..................................................................................................!!

    3. DEPURACIÓN.........................................................................................24

    %.1 INTRODU##I+N.........................................................................................................!)%.! LA #ONSOLA............................................................................................................!)

    %.% DE$URANDO  TS........................................................................................................!*%.) $UNTOS DE RU$TURA.................................................................................................!&%.* EVALUADOR DE E/$RESIONES......................................................................................!

    4. VARIABLES............................................................................................30

    ).1 INTRODU##I+N.........................................................................................................%0).! NO'BRES DE VARIABLES.............................................................................................%0).% INI#IALIA#I+N..........................................................................................................%0).) 2'BITO DE UNA VARIABLE...........................................................................................%1).* #ONSTANTES............................................................................................................%1

    5. TIPOS...................................................................................................32

    *.1 VARIABLES #ON  TI$O.................................................................................................%!*.! TI$OS $RI'ITIVOS  Y ENVOLTURA....................................................................................%!).2.1 *niciali+ación literal.......................................................................................33

    *.% O TROS  TI$OS...........................................................................................................%*).3.1 ,oid...............................................................................................................3)).3.2 -ull...............................................................................................................3)).3.3 nde/ned.....................................................................................................3)).3.' num............................................................................................................3)).3.) unction........................................................................................................3)).3. rra".............................................................................................................3).3.4 5bject...........................................................................................................3

    *.) TI$OS NO'BRADOS  Y RE3EREN#IA.................................................................................%

    *.* IN3EREN#IA DE  TI$OS.................................................................................................%).).1 *n6erencia b7sica...........................................................................................34

    1!

  • 8/19/2019 Cosas de TS

    10/154

    ).).2 8presiones tipadas por el conte8to.............................................................34*.& EL 'E"OR  TI$O #O'(N...............................................................................................%,

    )..1 n" como tipo general..................................................................................39)..2 :;.................................................................................................................39)..3 ntre primitivos............................................................................................39)..' ntre primitivos " envolturas........................................................................3<

    )..) ntre tipos re6erencia...................................................................................3<*.  TY$EO3....................................................................................................................%-*., EL USO DE LA 'E'ORIA..............................................................................................)0

    6. OPERADORES........................................................................................42

    &.1 O$ERADORES UNARIOS...............................................................................................)!.1.1 5peradores == " >>.......................................................................................'2.1.2 5peradores =? @............................................................................................'3.1.3 5perador A...................................................................................................'3.1.' 5perador B....................................................................................................'3.1.) 5perador delete............................................................................................''.1. 5perador void...............................................................................................''

    &.! O$ERADORES BINARIOS..............................................................................................)).2.1 5perador de asignación................................................................................''.2.2 5peradores lógicos.......................................................................................')

    &.!.!.1 4567e e8 TS.............................................................................................................)*&.!.!.! Oper59or AND........................................................................................................)*&.!.!.% Oper59or OR..........................................................................................................)&

    .2.3 5peradores aritmticos................................................................................'4&.!.%.1 Oper59ore7 y ;....................................................................................................)&.!.%.! Oper59ore7 < y =.....................................................................................................)&.!.%.% Oper59or >............................................................................................................)

    .2.' 5peradores de bits.......................................................................................'9&.!.).1 Oper59ore7 6?@ico7 it 5 it...................................................................................),

    &.!.).! Oper59ore7 y CC.............................................................................................),.2.) 5peradores relacionales...............................................................................'9

    &.!.*.1 Oper59ore7 C C.....................................................................................),&.!.*.! Oper59ore7 y F..............................................................................................)-&.!.*.% Oper59ore7 y F.........................................................................................)-

    .2. 5perador = de concatenación......................................................................)1.2.4 5perador in...................................................................................................)1.2.9 5perador condicional terciario......................................................................)1

    7. CONTROL DEL FLUO..............................................................................54

    .1 INTRODU##I+N.........................................................................................................*).! SELE#TIVAS..............................................................................................................*)

    4.2.1 i6...................................................................................................................)'4.2.2 sitcD...........................................................................................................))

    .% I TERATIVAS...............................................................................................................*&4.3.1 Dile.............................................................................................................)4.3.2 do>Dile........................................................................................................)4.3.3 6or.................................................................................................................)4.3.' 6or>in.............................................................................................................)4

    .) SENTEN#IAS (TILES $ARA LOS BU#LES...........................................................................*4.'.1 breaE............................................................................................................)44.'.2 continue........................................................................................................)9

    8. FUNCIONES...........................................................................................60

    ,.1 INTRODU##I+N.........................................................................................................&0,.! DE#LARA#I+N...........................................................................................................&0

    1&

  • 8/19/2019 Cosas de TS

    11/154

    ,.% $AR2'ETROS DE UNA 3UN#I+N....................................................................................&09.3.1 Par7metros opcionales " por de6ecto............................................................19.3.2 F7s par7metros............................................................................................19.3.3 Par7metros por valor o por re6erencia..........................................................2

    ,.%.%.1 $or 56or.................................................................................................................&!,.%.%.! $or re4ere8ci5.........................................................................................................&%

    ,.%.%.% $57o por copi5 re4ere8ci56......................................................................................&%,.) VALORES DE RETORNO...............................................................................................&),.* INVO#ANDO 3UN#IONES..............................................................................................&),.& SOBRE#ARGA...........................................................................................................&*,. 3UN#IONES AN+NI'AS...............................................................................................&&

    9.4.1 8presiones lambda G6unciones ecDaI.........................................................9.4.2 !ipado literal de una 6unción........................................................................49.4.3 !ipado mediante objetos literales.................................................................49.4.' Je/nición de 6unción por par7metro.............................................................99.4.) Conte8to.......................................................................................................99.4. unciones anónimas autoejecutables...........................................................<

    ,., 3UN#IONES QUE DEVUELVEN 3UN#IONES........................................................................&-,.- 3UN#IONES ES$E#IALIADAS........................................................................................0,.10 #O'$ARANDO 3UN#IONES...........................................................................................0

    !. ENUMERADOS.......................................................................................72

    -.1 INTRODU##I+N.........................................................................................................!-.! OBTENIENDO EL NO'BRE DEL VALOR.............................................................................!

    10. CLASES.................................................................................................74

    10.1 QUÉ ES UNA #LASE....................................................................................................)10.! #REA#I+N DE #LASES................................................................................................)10.% #ONSTRU#TORES......................................................................................................*10.) ESTADO  Y #O'$ORTA'IENTO.......................................................................................*

    10.'.1 l estado.......................................................................................................4)10.).1.1 Otr5 4orH5 9e 9ec65r5r 5trito7............................................................................&

    10.'.2 l comportamiento........................................................................................4410.'.3 5perador tDis................................................................................................49

    10.).%.1 #o8teJto................................................................................................................ ,10.* EN#A$SULA'IENTO....................................................................................................,0

    10.).1 Ketters " setter implLcitos.............................................................................9210.& KEREN#IA................................................................................................................,%

    10..1 l operador super.........................................................................................9310..2 #obreescritura..............................................................................................9)

    10.&.!.1 Soree7critr5 9e Hto9o7.................................................................................... ,*10. AGREGA#I+N  Y #O'$OSI#I+N......................................................................................,&10., $OLI'OR3IS'O.........................................................................................................,10.- #ONVERSI+N DE  TI$OS M#ASTING................................................................................,10.10 LIGADURA DIN2'I#A..................................................................................................,-10.11 INSTAN#EO3.............................................................................................................-010.1! EST2TI#OS...............................................................................................................-0

    10.12.1 Constantes mediante est7ticos.....................................................................

  • 8/19/2019 Cosas de TS

    12/154

    11.) INTER3A#ES LITERALES................................................................................................-11.* INTER3A#ES #O'O 3UN#IONES.....................................................................................-11.& 3USIONANDO INTER3A#ES............................................................................................-,11. #O'$ROBAR SI UNA #LASE I'$LE'ENTA UNA INTER3A.....................................................-,

    12. GEN"RICOS.........................................................................................100

    1!.1 INTRODU##I+N.......................................................................................................1001!.! RESTRI##IONES EN LOS $AR2'ETROS..........................................................................1011!.% GENÉRI#OS EN INTER3A#ES.......................................................................................10!1!.) 3UN#IONES GENÉRI#AS.............................................................................................10%1!.* #O'$ARANDO GENÉRI#OS.........................................................................................10%

    13. TIPADO ESTRUCTURAL.........................................................................104

    1%.1 '2S SOBRE LA #O'$ARA#I+N DE OB"ETOS...................................................................10)1%.! #O'$ARANDO #LASES..............................................................................................10)1%.% #O'$ARANDO INTER3A#ES........................................................................................10*1%.) #LASES I'$LE'ENTANDO OTRAS #LASES......................................................................10&1%.* INTER3A#ES KERENDANDO DE #LASES..........................................................................10

    14. CONTROL DE ERRORES.........................................................................108

    1).1 INTRODU##I+N.......................................................................................................10,1).! TI$OS DE ERRORES..................................................................................................10,1).% LANANDO ERRORES................................................................................................10-1).) LANANDO ERRORES 'ANUAL'ENTE...........................................................................1101).* 3INALLY.................................................................................................................110

    15. DOM...................................................................................................112

    1*.1 INTRODU##I+N.......................................................................................................11!1*.! DO#U'ENT............................................................................................................11!

    1).2.1 #eleccionar elementos................................................................................1121*.!.1.1 @etE6eHe8tByI9M................................................................................................. 11%1*.!.1.! @etE6eHe8t7ByT5@N5HeM.................................................................................... 11%

    1*.% #REAR ELE'ENTOS..................................................................................................11%1*.) ELI'INAR ELE'ENTOS...............................................................................................11%1*.* A##ESO A LOS ATRIBUTOS.........................................................................................11)

    16. EVENTOS............................................................................................116

    1&.1 INTRODU##I+N.......................................................................................................11&1&.! EVENTOS VISUALES..................................................................................................11&

    1.2.1 ase de captura..........................................................................................111.2.2 ase de objetivo..........................................................................................114

    1.2.3 ase de burbuja..........................................................................................1141.2.' Madir respuesta a los eventos...................................................................1141.2.) Par7metros de los Dandlers........................................................................1191.2. !arget " current!arget................................................................................1191.2.4 l uso del tDis.............................................................................................11<1.2.9 Parar la propagación de un evento.............................................................11<1.2.< Parar la propagación Dacia otros listeners del mismo elemento " evento. .120

    1&.% EVENTOS NO VISUALES.............................................................................................1!0

    17. AA#...................................................................................................122

    1.1 INTRODU##I+N.......................................................................................................1!!1.! #LASE DE UTILIDAD.................................................................................................1!!

    1.% ESTADOS DE LA $ETI#I+N  Y RES$UESTA DEL SERVIDOR....................................................1!)18. MÓDULOS...........................................................................................126

    1+

  • 8/19/2019 Cosas de TS

    13/154

    1,.1 INTRODU##I+N.......................................................................................................1!&1,.! $ARTES DE UN '+DULO............................................................................................1!1,.% I'$ORTAR  TI$OS......................................................................................................1!1,.) UN 'IS'O '+DULO EN DISTINTOS AR#KIVOS................................................................1!,1,.* 3USIONANDO '+DULOS #ON 3UN#IONES  Y ENU'S.........................................................1!,

    19.).1 unciones....................................................................................................12<

    19.).2 nums.........................................................................................................12<1,.& '+DULOS E/TERNOS MNODE. "S  Y REQUIRE. "S...............................................................1!-1,. TRABA"ANDO #ON LIBRERAS E/TERNAS.......................................................................1%0

    19.4.1 rcDivos de de/niciones.............................................................................1311,., EVITAR QUE UNA #LASE $UEDA SER SU$ER#LASE...........................................................1%1

    1!. ANE#O I. ARRA$S................................................................................134

    1-.1 INTRODU##I+N.......................................................................................................1%)1-.! A TRIBUTOS............................................................................................................1%*

    1

  • 8/19/2019 Cosas de TS

    14/154

    20.2.1' topperCase...............................................................................................1'420.2.1) trim.............................................................................................................1'9

    21. ANE#O III. SON...................................................................................150

    !1.1 LA #LASE  "SON......................................................................................................1*021.1.1 Je - a ...............................................................................................1)0

    21.1.2 Je a -...............................................................................................1)1

    !!

  • 8/19/2019 Cosas de TS

    15/154

  • 8/19/2019 Cosas de TS

    16/154

    1.!.3 Compatibilidad con navegadores

    =esgraciadamente para los desarrolladores y %s%arios no todos los navegadores interpretan J)de la misma orma. %n%e se han hecho importantes progresos en los Altimos tiempos4 sig%en%edando restos de lo %e se ha demostrado ser %na chap%,a. 9avegadores como BE+ y anteriores no

    son compatibles con todas las caractersticas del estándar y otras las han adaptado. Es importante %etodo n%estro c$digo sea ejec%table en la mayora de navegadores para tener la mayor cantidad de%s%arios potenciales disponibles.

    1.3 TpeScript(ype)cript 5a partir de ahora ()6 es %n leng%aje de programaci$n de c$digo abierto

    desarrollado por 2icrosot.

    La primera versi$n se liber$ en !1! y a echa de la edici$n del libro la Altima es la 1.1..1.)% estándar es el EC2)cript como lo es tambi"n de y ction)cript 5a partir de ahora )6.

    () es %n s%perconj%nto de J) %e le proporciona %na capa de orientaci$n a objetos. #or ello no eisteningAn navegador %e ejec%te () de orma nativa sino %e todo el c$digo es trad%cido a J).

    Entre s%s mejores caractersticas está la compatibilidad con todo el c$digo J) eistente.#odemos %sar libreras como j%ery sin problemas p%es () es J).

    1.3.1 D#or %" (ype)ript

    J) se diseF$ para ser %n leng%aje con el %e desarrollar pe%eFas %ncionalidades en la ?eb.Con el paso del tiempo y la llegada de las aplicaciones ricas en Bnternet 5GB6 s% %so no s$lo se haetendido4 sino %e el propio leng%aje se ha visto s%perado por las circ%nstancias. Los proyectos soncada ve, más complejos y necesitan mejores %ncionalidades. 9o es %n leng%aje pensado paragrandes aplicaciones por lo %e la diic%ltad para desarrollarlas ha ido en a%mento4 siendo %nverdadero %ebradero de cabe,a por s%s partic%laridades como s% sing%lar orientaci$n a objetosmediante prototipos. #or otro lado no es posible hacer borr$n y c%enta n%eva y dejar de darle soporte

     por%e está tan arraigado al m%ndo ?eb %e prácticamente el H de las ?ebs act%ales no%ncionaran4 lo %e obligara a hacer n%evos desarrollos. nte esta tesit%ra y la cada ve, más %erte

     presi$n de la com%nidad4 se intentaron hacer cambios para4 de cierta manera4 mitigar estos problemas%e ha venido arrastrando. lternativas como Coe)cript o Live)cript s%rgieron para este prop$sitoa%n%e con %n "ito moderado. 2icrosot ha decidido dar %n paso al rente y lan,ar s% propiaadaptaci$n4 %e introd%ce cambios signiicativos como el tipado estático4 clases4 interaces4 etc4 con%na sintais similar a Java.

    1.3.! %" es y no es (ype)cript

    () no es nada por s mismo4 p%esto %e s% c$digo no se compila ni se interpreta4 sino %e setrad%ce a J). Ina ve, trad%cido4 estaramos ante c$digo J) nativo interpretable por c%al%ier 

    sot?are %e lo permita4 como %n navegador ?eb.

    !*

  • 8/19/2019 Cosas de TS

    17/154

    1.3.3 () es J)

    0ay ciertas caractersticas de () %e son trad%cibles a J) de %na orma más o menos análoga4como las clases. 0ay otras4 en cambio4 %e no4 como las interaces4 las c%ales no generan c$digoalg%no4 es decir4 s$lo eisten para comprobaciones en tiempo de compilaci$n.

    () %sa caractersticas de EC2)cript 34 ; y *. lg%nas de ellas las trad%ce de orma nativa aJ)4 como los getters y  setters implcitos de la EC2)cript ;4 y con otras no %sa las caractersticasnativas de J)4 como los m$d%los de la EC2)cript *. La EC2)cript * describe el %so de m$d%loscomo %na caracterstica n%eva de J) con %na sintais determinada. Con () tambi"n se p%eden %sar m$d%los4 pero si lo hacemos podemos observar %e no trad%ce el c$digo a la sintais del estándar4sino %e ni si%iera hace %na trad%cci$n. Eso es as para poder %sar lo n%evo de la EC2)cript * ennavegadores no compatibles. #ero no todas están presentes en (). s% ve, posee caractersticas

     propias no determinadas en EC2)cript 5por el momento6 como los gen"ricos.

     9o todos los navegadores ?ebs con compatibles con todas las %ncionalidades de todos losestándares de EC2)cript4 por lo %e hay %e tener c%idado a la hora escribir n%estro c$digo ()4

     p%es el %so de ciertas caractersticas lo hara inejec%table en alg%nos navegadores.

    % podemos ver %na lista de EC2)cript ; y * y s% compatibilidad.

    http://

  • 8/19/2019 Cosas de TS

    18/154

    admite. El compilador se aFade de orma a%tomática a la variable #(0 del sistema por lo %e podemos invocarlo desde c%al%ier parte.

    #ara compilar () man%almente lo normal sera escribir:

    tsc -target E); --removeComments --declaration --o%t app.ts app.js

    --target E); : Especiica sobre %" estándar %eremos compilar. Las opciones son: E)34 E);y E)*.

    --declaration: genera el archivo de deiniciones d.ts Es %na herramienta eperimental y p%edeallar con el %so de caractersticas avan,adas.

    --o%t app.ts app.js: Esto trad%cirá el archivo app.ts a app.js. y todas las reerencias %e sehagan desde app.ts si n%estra aplicaci$n son varios archivos.

    --removeComments : Elimina todos los comentarios.

     9ormalmente esto no es necesario pero es importante saberlo por si %eremos %tili,arlo.

    3

  • 8/19/2019 Cosas de TS

    19/154

    2.!eneralidades

    2.1 SentenciasIna sentencia es %na lnea de c$digo escrita en %n leng%aje de programaci$n. En () se

    delimitan con el smbolo NK 5p%nto y coma6 como norma general4 a%n%e es opcional. Larecomendaci$n es escribirlo siempre para no perder la cost%mbre c%ando %semos otros leng%ajes

     p%es en la mayora s es obligatorio. (ambi"n hace el c$digo más legible ya %e estamos marcando

    de orma eplcita el inal de la sentencia y sabemos eactamente d$nde empie,a la n%eva.

    2.2 Sensible a las "a#sculas() es case sentitive. 0ay %e tener c%idado con esto por%e no es lo mismo escribir como

    nombre de variable cosa %e Cosa o CO)4 son totalmente distintas y no tienen relaci$n alg%na. Esaplicable a %nciones4 clases4 interaces4 etc4 es decir4 a todo el leng%aje.

    2.3 $alabras reservadasEl leng%aje especiica %na serie de palabras reservadas %e orman parte de s% sintais. Pstas

    no p%eden ser %sadas para otra cosa %e no sea para lo %e se diseF$ y no se permiten nombre devariables4 %nciones4 etc llamadas de la misma orma:

     brea

  • 8/19/2019 Cosas de TS

    20/154

    0ay dos tipos de comentarios: en lnea y en blo%e. Los comentarios en lnea se constr%yenempe,ando con %na doble barra //. (odo lo %e escribamos detrás de esa doble barra será ignorado

     por el compilador.

    %% E&'( )& *+ ,(-)+'/(

    e7to 8o y pro9ce 8 error

    El comentario en blo%e se empie,a con /R y se acaba con R/

    % E&'( )& *+ ,(-)+'/( )&'( )& ,(+'+*,+ ) ,(-)+'/(+')/(/ )+ ('/& +)& %

    3&

  • 8/19/2019 Cosas de TS

    21/154

    3.(ó"o e"pe)ar

    3.1 IntroducciónC%ando se generan los archivos .js a partir de los .ts4 se deben incl%ir como si de c%al%ier 

    otro .js se tratara. nte %na estr%ct%ra de %na página ?eb básica:

    tH6Ce59C

    tit6eC $(T)S,/'=tit6eC=e59Co9yC=o9yC

    =tH6C

    Los archivos .js se incl%yen dento de SheadTS/headT de la sig%iente orma:

    7cript type9'):'%;

  • 8/19/2019 Cosas de TS

    22/154

    #ara s$lo tener %e incl%ir %n archivo .js es preerible compilar y agr%par todo n%estro (). Esalgo %e se p%ede hacer desde %n editor de () o man%almente desde el compilador con la consola decomandos. #ara ello es necesario %e las reerencias sean correctas4 es decir4 %e cada archivo .tsimporte los otros .ts %e necesite para %ncionar. Esto se verá en el capt%lo de 2$d%los.

    3.2 *ditoresGealmente no es obligatorio %n editor de () p%es podemos escribir n%estro c$digo en %n

    archivo de teto plano y compilarlo a trav"s de la lnea de comandos. #ero lo %e %eremos esacilitarnos las cosas4 no complicárnoslas.

    In editor nos ay%da coloreando las palabras reservadas del leng%ajeN mostrándonos loserrores sintácticosN a%tocompletando n%estro c$digo con s%gerencias segAn vayamos escribiendo4

    etc. demás de compilar () de orma a%tomática.(enemos %e elegir %n editor para empe,ar. Gealmente hay pocos disponibles.

    2icrosot orece %no online en:

    http://???.typescriptlang.org/#laygro%nd

    #ero no sirve para proyectos reales ya %e no organi,a por archivos ni permite s% g%ardado.0ay %e verlo como %n entorno de pr%ebas rápidas donde podemos4 sin necesidad de instalar nada4ejec%tar pe%eFos tro,os de c$digo para observar s% comportamiento.

    2icrosot tiene s% propio B=E para trabajar con () llamado 'is%al )t%dio. )irven lasversiones de !1! y !13 para las %e hay %e descargar %na etensi$n e instalarla. El granincoveniente es %e no se enc%entra de orma grat%ita. #or ello recomiendo %na alternativa llamada(ypEcs. Es %n pl%gin de Eclipse4 conocido por ser la herramienta de desarrollo para Java más %sada.

    Los re%isitos para %sar (ypEcs son tener instalado Java >4 Eclipse Uepler &.3 y 9ode.js.+.1 o versiones s%periores de las anteriores citadas. )e p%ede descargar desde s% ?eb oicial:http://typecsdev.com/

    Ina ve, c%mplidos los re%isitos4 debemos abrir Eclipse 5en la echa de escrit%ra de este librola Altima versi$n es &.& L%na6. Ina ve, hayamos creado el workspace4 arrastramos el icono hacian%estro Eclipse abierto.

    3+

    http://www.typescriptlang.org/Playgroundhttp://typecsdev.com/http://www.typescriptlang.org/Playgroundhttp://typecsdev.com/

  • 8/19/2019 Cosas de TS

    23/154

    =e la ?eb http://typecsdev.com/do?nload.html

    ceptamos la licencia y nos pedirá permisos para reiniciar Eclipse. ceptamos y esperamos.

    Ina ve, hecho4 creamos n%estro proyecto en 7ile-T 9e? #royect

    M elegimos #roject del desplegable Veneral

    )eg%idamente p%lsamos bot$n derecho sobre n%estro proyecto y elegimos la opci$n

    Conig%redd (ype)cript )%pport

    hora crea %n n%evo archivo dentro del proyecto con la etensi$n .ts 5app.ts4 por ejemplo6 yestamos listos para empe,ar. #or deecto se compilará n%estro c$digo () al g%ardar c%al%ier cambiode c%al%ier archivo %e pertene,ca al proyecto.

    Creamos %n archivo con etensi$n .html y le aFadimos la eti%eta  script  donde el src sea elarchivo .js4 en este caso app.js. El c$digo %e se deba ejec%tar en %na ?eb debe hacerse desp%"s de lacarga de la propia página p%es no será hasta entonces c%ando est" todo disponible. #ara elloescribimos en app.ts

    i89o.o86o59 M C%% ,>(

    #ara probar lo %e hacemos abrimos el archivo .html creado anteriormente con %n navegador ?eb.

    &

    http://typecsdev.com/download.htmlhttp://typecsdev.com/download.html

  • 8/19/2019 Cosas de TS

    24/154

    Ges%midamente4 a estas alt%ras4 en n%estro proyecto tendremos:

    inde+.,t"l

    app.ts

    app.js

    El archivo .html incl%ye en s% SheadT el archivo app.js. Cada ve, %e modii%emos el app.tsse compilará en app.js.

    3.3 -ividir el proecto

    Es evidente %e si creamos n%estras clases4 interaces4 etc4 no lo vamos a hacer en el mismo.ts4 sino %e4 como es lo normal en la programaci$n orientada a objetos4 cada clase est" en %n archivoAnico. #or ello4 ante esta hipot"tica estr%ct%ra:

    app.tsclase.ts

    )i en app.ts %samos clase.ts4 lo reerenciaremos de la orma adec%ada en app.ts. la hora decompilar () todo se concentrará en %n Anico archivo .js. Esto hara %e por cada página donde%eramos aFadir c$digo tendramos compilar el c$digo especico para esa página j%nto con todas las%tilidades %e hayamos creado. 9o es recomendable por%e rompe totalmente con la ilosoa de la

    re%tili,aci$n. Lo mejor es hacer %n proyecto () donde tengamos todas n%estras creaciones y sea elres%ltado de ello lo %e %semos en cada página.

    modo de ejemplo:

    pagina1.,t"l pagina2.,t"l

    Bmagina %e tenemos dos páginas con esos nombres donde %eremos aFadir c$digo J).

    Creamos %n archivo .ts por cada %na 5y s% .js6:

    pagina1.,t"l pagina2.,t"l

     pagina1.ts pagina!.ts

     pagina1.js pagina!.js

    )i en cada .ts hemos %sado n%estras propias clases4 interaces4 etc4 lo aFadimos a modo de

    librera:

    &!

  • 8/19/2019 Cosas de TS

    25/154

    pagina1.,t"l pagina2.,t"l

    libreria.js libreria.js

    libreria.d.ts libreria.d.ts

     pagina1.ts pagina!.ts

     pagina1.js pagina!.js

    =e esta orma %saremos n%estra propia librera como eterna4 mediante el archivo dedeiniciones. s conseg%imos re%tili,arla en todas las páginas %e %eramos y separaremos elc$digo especico de cada %na.

    3.% ibrer/as e+ternasC%ando estemos trabajando con libreras eternas el procecimiendo es algo distinto. Ma %e lo

    normal es orecer todo n%estro c$digo en %n Anico archivo .js %e es el %e realmente se va a %sar inalmente en la ?eb4 nosotros podemos orecer las n%estras como %n proyecto de () y %e sea el

     programador %e la %se el responsable de s% compilaci$n y %tili,aci$n. La otra orma es proveer elarchivo .js j%nto con %n archivo de deiniciones. El archivo .js se aFade al .html normalmente y es enn%estro proyecto de () donde %saremos el d.ts. )i está bien constr%ido todo lo %e ah se epongatendrá s% e%ivalencia en la librera en J) por lo %e no habrá problemas al ejec%tarlo.

    &&

  • 8/19/2019 Cosas de TS

    26/154

  • 8/19/2019 Cosas de TS

    27/154

    %.-epuración

    %.1 Introducción•   Nota: Las imágenes expestas en este cap!tlo han sido o"tenidas del navegador #hrome de

    $oogle. %tros navegadores tienen n comportamiento similar.

    En el desarrollo de n%estra aplicaci$n se nos hace indispensable el poder ver de %na ormaclara %" está haciendo n%estro c$digo mientras se ejec%ta. #ara ello podemos %sar las herramientasde dep%raci$n de c$digo o de"gging. Con ellas observamos el comportamiento de cada sentencia

     p%diendo parar s% ejec%ci$n en %n p%nto y ejec%tarla lnea a lnea con el in de poder recabar lainormaci$n necesaria.

    %.2 a consolaIna herramienta m%y importante es la consola. En ella podemos ver los errores de n%estra

    aplicaci$n as como la lnea de c$digo donde ha allado. #%lsa 71! para abrirla.

    % podemos ver %e se ha lan,ado %na ecepci$n %e no se ha controlado

    Bntentamos ejec%tar %n m"todo de %n objeto con valor n%lo.

    (ambi"n podemos escribir desde n%estro c$digo. #ara %tili,arla tenemos a n%estra disposici$nel objeto console con %na serie de m"todos. Los más importantes son:

    co87o6e.6o@Mpro589o co87o6e.6o@

    &+

  • 8/19/2019 Cosas de TS

    28/154

    co87o6e.i84oMpro589o co87o6e.i84o

    co87o6e.errorMpro589o co87o6e.error

    %.3 -epurando TSGealmente no podramos dep%rar directamente () p%es lo %e se ejec%ta es s% trad%cci$n enJ). #ero el compilador de () genera %nos archivos .maps %e relacionan el c$digo () con el nativoen J). =e esta orma4 podemos tra,ar %na correspondencia lnea a lnea lo %e hace %e pare,ca %eestamos dep%rando () de orma directa.

    #ara activar esta caractersticas en #hrome debemos abrir el navegador y p%lsar 71!. En la parte s%perior derecha de la pestaFa %e se ha abierto aparece %n icono de %na sierra dentada comoen la imagen

    #%lsamos y nos abrirá otra pestaFa en la %e debemos marcar la opci$n  &na"le 'avacript  sorce maps

    Ina ve, hecho podemos ver el c$digo () en la pestaFa orces y eligiendo el archivo .ts %e%eramos.

    ;

  • 8/19/2019 Cosas de TS

    29/154

    %.%$untos de ruptura

    Llamados "reak points en ingl"s. )% %tilidad es tan simple como importante. Con ellosestablecemos %na lnea en el c$digo donde la ejec%ci$n del programara se parará c%ando lleg%e a ese

     p%nto. Ina ve, ah tenemos las opciones de seg%ir con la ejec%ci$n o eval%ar epresiones.

    Estos se establecen sobre el c$digo en la misma pestaFa orces p%lsado sobre la lnea %e%eramos. )e verá %na eti%eta a,%l sobre el nAmero de lnea.

    )i act%ali,amos la página p%lsando 7;

    ;!

  • 8/19/2019 Cosas de TS

    30/154

    'emos %e la lnea !;4 %e es donde establecimos el p%nto de r%pt%ra4 se ha coloreado dea,%l. En la imagen la ejec%ci$n del programa está parada.

    En ese momento tenemos a n%estra disposici$n en la parte derecha de esa misma pestaFa4%nos botones Atiles.

    (ódigo &so

    1 ContinAa con la ejec%ci$n hasta el inal o hasta %e enc%entre otro p%nto de r%pt%ra.

    2 Ejec%ta la lnea sobre la %e está posicionado y pasa a la sig%iente.

    3 Ejec%ta el c$digo hasta la sig%iente %nci$n %e enc%entre.

    % Ejec%ta el c$digo hasta salir de la %nci$n act%al.

    ' =esactiva todos los p%ntos de r%pt%ra. 9o los elimina4 simplemente los ignora.

    0 #ara la ejec%ci$n c%ando se lan,a %na ecepci$n.

    %.' *valuador de e+presionesIna ve, hayamos parado la ejec%ci$n de n%estro programa4 podemos eval%ar epresiones en

    el watcher seleccionando la variable con el c%rsor y p%lsando bot$n derecho.

    ;&

  • 8/19/2019 Cosas de TS

    31/154

    Esto aFadirá el elemento seleccionado a %n panel de la parte derecha llamado atch &xpresions

    )i el valor %era nll  lo indicara. En este caso se trata de %na variable %e contiene %n nododiv de id content . #odemos desplegarla para ver con más detalles de %" se compone.

    Ges%lta increblemente Atil en sit%aciones en las %e no sabemos %" valor está asignándose a%na variable en la %e observamos %n comportamiento etraFo.

    Es posible4 tambi"n4 conocer el valor de %na epresi$n comparativa4 aritm"tica4 etc.Gealmente4 es posible observar c%al%ier sentencia. 

    ;*

  • 8/19/2019 Cosas de TS

    32/154

    ;+

  • 8/19/2019 Cosas de TS

    33/154

    '.ariables

    '.1 IntroducciónLas variables en () sirven para lo mismo %e en todos los leng%ajes de programaci$n: para

    almacenar inormaci$n. M como s% nombre indica p%eden variar s% contenido d%rante toda laejec%ci$n del programa.

    #ara crearlas se %tili,a la palabra clave var seg%ido de %n nombre identiicativo. esto se le

    llama declarar %na variable.

  • 8/19/2019 Cosas de TS

    34/154

    '.3 Iniciali)aciónBniciali,ar %na variable es asignarle %n valor. En () las variables no se iniciali,an de orma

    a%tomática como en otros leng%ajes de programaci$n donde4 por ejemplo4 las de tipo n%m"rica seiniciali,an con el valor si no le establecemos %n valor eplcitamente.

  • 8/19/2019 Cosas de TS

    35/154

    *&

  • 8/19/2019 Cosas de TS

    36/154

    0.Tipos

    0.1 ariables con tipoIn tipo identiica lo %e almacena %na variable. 9o es lo mismo %n nAmero %e %na letra.

    Las variables en () son estáticamente tipadas. Esto %iere decir %e a la hora declararla podemos establecer %" tipo de datos contiene. La sintais para tipar %na variable es la sig%iente:

  • 8/19/2019 Cosas de TS

    37/154

    )i declaramos %na variable con %n tipo primitivo4 no la podemos iniciali,ar con el tipoenvolt%ra a%n%e s se p%ede hacer lo inverso.

    *.!.1 Bniciali,aci$n literal

    Consiste es asignarle el valor directamente a %na variable sin %sar ningAn constr%ctor . (antolos primitivos como los envolt%ra p%eden ser iniciali,ados de orma literal.

      E7to e7 85 c59e85

  • 8/19/2019 Cosas de TS

    38/154

    DC%ándo %sar %no % otro 'ayamos por partes:

    Con respecto a nm"er/Nm"er, con el primero se p%eden %sar los operadores aritm"ticos ycon el seg%ndo no. Es algo ecl%sivo de () ya %e en J) es perectamente válido por lo %e estamosante otra comprobaci$n en tiempo de compilaci$n. Esto s%pone %n gran inconveniente.

  • 8/19/2019 Cosas de TS

    39/154

    )$lo sirve para determinar %e %na %nci$n no dev%elve ningAn valor. (ambi"n se podrantipar variables con void pero carece de sentido.

    *.3.! 9%ll

     9o se p%ede tipar %na variable con Nll. )$lo p%ede ser el valor de la variable. C%al%ier tipode variable p%ede contener el valor nll . Gepresenta valor n%lo.

  • 8/19/2019 Cosas de TS

    40/154

  • 8/19/2019 Cosas de TS

    41/154

    0.' In5erencia de tiposBnerir4 segAn la GE se deine como: )acar %na consec%encia o ded%cir algo de otra cosaK.

    En este sentido se reiere a la capacidad de ded%cci$n del compilador a la hora de asignar tipos de orma a%tomática a variables no tipadas eplcitamente4 segAn ciertas circ%nstancias.

    *.;.1 Bnerencia básica

    Es la %e oc%rre c%ando se nos olvidaK tipar %na variable %e hemos iniciali,ado.

  • 8/19/2019 Cosas de TS

    42/154

    0.0 *l "e6or tipo co"#n0ay sit%aciones en las no hemos tipado %n array y lo hemos rellenado de valores de distinto

    tipo:

  • 8/19/2019 Cosas de TS

    43/154

    )i rellenamos el array con instancias de clases o interaces el mejor tipo comAn será a%"l%e sea compatible con todos los demás. En el caso de %e no eista4 el res%ltado será . %n%elas clases instanciadas sean s%bclases de otra comAn4 el algoritmo debe elegir entre los tiposeplcitamente introd%cidos.

    ,&& A ,&& B

  • 8/19/2019 Cosas de TS

    44/154

    Con este operador tambi"n podemos tipar %na variable con el tipo de otra. Es lo %e seconoce en () como tipos cons%lta.

  • 8/19/2019 Cosas de TS

    45/154

    +&

  • 8/19/2019 Cosas de TS

    46/154

    7.4peradores

    7.1 4peradores unariosLos operadores %narios son a%"llos %e s$lo necesitan %n operando para poder ser %sados.

    >.1.1 Operadores y --

    )$lo para Any, nm"er y enm.

    )on los llamados incremento 56 y decremento 5--6. )irven para s%mar o restar %na %nidad a%n nAmero. s% ve,4 dependiendo de d$nde lo escribamos4 p%eden ser preincremento/predecrementoo postincremento/postdecremento.

  • 8/19/2019 Cosas de TS

    47/154

    .1.! Operadores 4 \  

    )$lo sirven para nm"er, Any y enm.

    Convierten %n valor del tipo Any a nm"er .

    K1 +*-?)/ 1

    El operador - tambi"n p%ede %sarse con nm"er  para negativi,ar.

    .1.3 Operador ]

    Es el complemento a %no. Cambia todos los bits a 1 y todos los bits 1 a . En la prática

    convierte %n nAmero en s% inverso y le resta 1.

  • 8/19/2019 Cosas de TS

    48/154

    .1.; Operador delete

    8orra propiedades de objetos o elementos de %n array.

    )i se borra la posici$n de %n array4 "ste no se redimensiona4 sino %e convierte esa posici$nen nde+ined .

    =ev%elve tre o +alse dependiento de si ha podido eliminar o no el elemento.

  • 8/19/2019 Cosas de TS

    49/154

    )on operadores llamados pere,osos por%e no sig%en eval%ando en c%anto el res%ltado de %naepresi$n o conj%nto de ellas es s%iciente para determinar toda la condici$n.

    7.2.2.1  5alse en TS

    4  5cadena vaca64 nll  y nde+ined 

    7.2.2.2 4perador A-

    )e representa: ``

    )erá tre si4 y s$lo si4 todas las epresiones son tre.

    e+presión1 e+presión2 e+presión1 99 e+presión2

    tr%e tr%e tr%e

    tr%e alse alse

    alse alse alse

    alse alse alse

    )i alg%no de los dos se evalAa como  +alse4 el res%ltado será +alse. Ina epresi$n p%ede ser 

    %na variable o %na epresi$n compleja. )e p%eden hacer todo lo etensas %e se desee

    [ `` [ `` ... `` [ ``

    Bncl%so se p%ede establecer prioridades con par"ntesis:

    epresion1 ̀ ` 5epresi$n! ̀ ` epresion36

    epresion! y epresion3 actAan como %na a la hora de eval%arse de orma conj%nta conepresion1

    (ambi"n p%ede %sarse para %na asignaci$n condicional. )i el primer operando se evalAa como

    tre4 se asignará el valor del seg%ndo operando. )i se evalAa como  +alse4 se asignará el valor del primero. La variable siempre %edará tipada con el tipo de dato del seg%ndo operando.

  • 8/19/2019 Cosas de TS

    50/154

    y nll  es +alse64 se asignará a nombre el valor del primer operando sin eval%ar el seg%ndo. )i personano %era nll  eval%ara persona.nom"re y se lo asignara a nom"re.

    7.2.2.3 4perador 4: 

    )e representa

    )erá tre si alg%no de los operandos es tre.

    e+presión1 e+presión2 e+presión1 ;; e+presión2

    tr%e tr%e t%e

    tr%e alse tr%e

    alse alse tr%e

    alse alse alse

    l ig%al %e con 9=4 se p%eden hacer todo lo largas %e se %iera.

    (ambi"n p%ede %sarse para %na asignaci$n condicional.

  • 8/19/2019 Cosas de TS

    51/154

    7.2.3.1 4peradores < =

    )on los %sados para s%mar y restar nAmeros respectivamente.

  • 8/19/2019 Cosas de TS

    52/154

    operador uso

    9 Geali,a la operaci$n 9= bit a bit.

    ; Geali,a la operaci$n OG bit a bit.

    Geali,a la operaci$n OG bit a bit

  • 8/19/2019 Cosas de TS

    53/154

    )e p%ede %sar tambi"n con string . (odos los caracteres tienen %n c$digo n%m"rico %e losidentiica. La comparaci$n se hara en base a "l.

    5 C A %% '/*) C A %% '/*)

    Como p%edes ver4 bK es mayor a K por%e el c$digo )CBB de la letra b minAsc%la esmayor %e el c$digo )CBB de la letra mayAsc%la. Las letras mayAsc%las tienen %n c$digo menor alas minAsc%las.

    2ás inormaci$n sobre )CBB:http://es.?i  A

  • 8/19/2019 Cosas de TS

    54/154

    J y %% &)5 %% &)

    Esta ve, no s$lo compr%eba el valor4 sino tambi"n el tipo sin hacer conversion. Comonm"er   y  Nm"er   no son el mismo tipo ni tampoco  string   y tring 4 el res%ltado de las

    comprobaciones del ejemplo son +alse.

    DC$mo se eval%ara %na comprobaci$n de ig%aldad entre dos tring   5envolt%ra6 c%yascadenas %eran ig%ales

  • 8/19/2019 Cosas de TS

    55/154

    )i al menos %no de ellos es string  el res%ltado será string  por%e los concatena4 es decir4 los %ne. Eneste caso estara act%ando como operador de concatenaci$n.

  • 8/19/2019 Cosas de TS

    56/154

  • 8/19/2019 Cosas de TS

    57/154

    1+

  • 8/19/2019 Cosas de TS

    58/154

    8.(ontrol del 5lu6o

    8.1 IntroducciónLa idea básica de la programaci$n es la a%tomati,aci$n de procesos en los %e %n h%mano

    debera hacerlos de orma man%al cada ve, %e %isiera obtener res%ltados. #or ello esimprescindible poder controlar la ejec%ci$n del programa tomando decisiones sobre %" debera o noejec%tar dependiendo de la sit%aci$n. #or otra parte4 no basta con bi%rcar los caminos4 sino %e

    debemos tener algAn mecanismo para repetir sentencias de orma %e no nos oblig%e a escribir %nnAmero de veces sit%aciones análogas.

    8.2 Selectivas+.!.1 i  

    )irve para tomar decisiones bajo alg%na condici$n. % es donde res%ltan imprescindibleslos operadores l$gicos.

      %,(+,+% %% C>(

    * 5 %)&)

    % S +( )& >* 5 )+'/ * %

    demás se p%ede %sar el blo%e else i+  para determinar más casos.

     MJ * %% S) );),*' & : )& >* 5%% C>(

    )&)   MJ & %% S )& >* 6 

    )&) 

    11

  • 8/19/2019 Cosas de TS

    59/154

    %% S +( )& >* + 5 + 6

    En la condici$n p%edes %sar todos los operadores de comparaci$n %e %ieras j%nto conoperadores l$gicos.

    ( & : ( & : ( )+ ) ,&( ) *) +( &) ++>*+( ) (&

    +')/(/)& %?/) 

    11!

  • 8/19/2019 Cosas de TS

    60/154

    8.3 IterativasIn b%cle es %na repetici$n limitada o no 5los b%cles ininitos no son b%ena idea6 de %n blo%e

    de c$digo. )i4 por ejemplo4 %eremos mostrar por pantalla los 1 primeros nAmeros y no %sáramos b%cles4 tendramos %e escribirlos todos a mano. bs%rdo4 Dno crees

    +.3.1 ?hile

    El b%cle while se ejec%ta mientras la condici$n sea tre.

    C Z"o7 #5r6o7 L5H5[

    (/ M

  • 8/19/2019 Cosas de TS

    61/154

    #odemos declarar más de %na variable y hacer %e la condici$n sea más compleja conoperadores l$gicos. demás en la act%ali,aci$n podemos %sar c%al%ier operador matemático. LaAnica restricci$n es %e el ndice ha de ser n%m"rico entero.

    +.3.& or-in

    Es similar al +or  pero no se declara %n ndice n%m"rico y recorre la estr%ct%ra de principio ain4 sin condiciones.

  • 8/19/2019 Cosas de TS

    62/154

    ( N( &) );),*'.

    )i enc%entra el valor Jos"K en el array nom"res itera el sig%iente sin ejec%tar el c$digo %e%edaba.

    11+

  • 8/19/2019 Cosas de TS

    63/154

    1!

  • 8/19/2019 Cosas de TS

    64/154

    G.Hunciones

    G.1 IntroducciónLas %nciones no son más %e sentencias agr%padas para sol%cionar %n problema en

     partic%lar. =e esta orma la invocamos c%ando sea necesario evitando la repetici$n de c$digo.

    () hereda la orma en la %e trabajan las %nciones en J) pero aFadi"ndole etrass%stanciales.

    G.2 -eclaraciónIna %nci$n se divide en dos partes: cabecera y c%erpo. La cabecera deine a la %nci$n

    mediante %n nombre4 %na lista de parámetros 5opcional6 separados por coma y %na salida 5p%ede ser la salida vaca6.

    #ara declarar %na %nci$n %tili,a la palabra reservada  +nction seg%ida de la cabecera y delc%erpo4 el c%al está encerrado entre llaves.

    *+,'(+ 8oHreDeL538cio8M:

  • 8/19/2019 Cosas de TS

    65/154

    lista5arametros representa %na lista de parámetros separados por coma. Los parámetros sonvalores %e la %nci$n acepta como entrada. Esto res%lta m%y Atil para constr%ir %nciones másre%tili,ables %e nos ahorren tiempo y trabajo. Los parámetros se declaran eactamente ig%al %e lasvariables pero sin la palabra reservar var .

    *+,'(+ 48cio8 MJ: +*-?)/ W: +*-?)/:

  • 8/19/2019 Cosas de TS

    66/154

  • 8/19/2019 Cosas de TS

    67/154

    0emos creado %na variable de tipo nm"er  con %n valor iniciali,ado de ;. 0emos invocado la%nci$n pasando esta variable como arg%mento. En ese momento se ha creado %na copia de lavariable  x  de %era de la %nci$n hacia la variable  y de dentro de la %nci$n. )i modiicamos lavariable y 5en este caso hemos s%mado %no6 vemos como la x se mantiene intacta.

    G.3.3.2 $or re5erencia

    En contraposici$n al paso por valor eiste el paso por reerencia. En "ste no se hace %na copiadel valor de la variable hacia el parámetro de la %nci$n4 sino %e lo %e se le pasa es la reerencia dela direcci$n de memoria.

    C%ando se crea %na variable se reserva %n espacio de memoria donde almacenarla. Eseespacio de memoria tiene %na direcci$n %e maneja internamente la má%ina virt%al. l hacer %n

     paso por reerencia lo %e se le proporciona es esta direcci$n de memoria a otra variable. =osvariables4 a priori distintas4 %e posean la misma direcci$n están ap%ntando al mismo l%gar de la

    memoria por lo %e en realidad son la misma variable.

  • 8/19/2019 Cosas de TS

    68/154

    yZ0[ == 1

    copi5Re4MJJZ0[ == 0

    Es ig%al %e el ejemplo del paso por reerencia pero con la dierencia de %e no cambiamos la posici$n del array y4 sino %e lo volvemos a iniciali,ar pero con el valor 1 en cada posici$n. lacabar la ejec%ci$n de la %nci$n y mostrar la posici$n de 4 segAn lo %e hemos aprendido deberaser 1. #%es no4 es . D#or %" #or%e4 como se ha eplicado anteriormente4 no se le ha pasado ladirecci$n de memoria original4 sino %na copia.

    G.% alores de retorno

    Las %nciones p%eden devolver %n valor si as lo precisamos. #ara ello se debe especiicar enla cabecera de la %nci$n el tipo de dato %e %eremos devolver: nm"er 4  string 4  Array[ )i la%nci$n no va a devolver nada4 hay %e especiicarlo con la palabra reservada void .

    *+,'(+ 9ee6e MJ: +*-?)/ y: +*-?)/: +*-?)/  /)'*/+ ) %% D)

  • 8/19/2019 Cosas de TS

    69/154

  • 8/19/2019 Cosas de TS

    70/154

    G.7 Hunciones anóni"asLas %nciones an$nimas son a%"llas %e no tienen ningAn nombre especiicado.

    M:

  • 8/19/2019 Cosas de TS

    71/154

    .>.! (ipado literal de %na %nci$n

    0emos visto %e %na %nci$n p%ede almacenarse en %n objeto4 ya sea mediante epresionesestándar o lechas.

    La c%esti$n %e se nos plantea es %e si en () todo está tipado4 Dc$mo se tipan las %nciones#odemos pensar %e con el tipo ;nction ya sera s%iciente. En %n principio podra ser as ya %e%nciona perectamente pero s% gran inconveniente es %e con "l no se p%ede tipar de %na orma másrestrictiva4 esto es deiniendo %na cabecera de %nci$n eacta.

    En n%estro ejemplo:

    Lo %e a% nos permite la primera orma es poder sobrecargar la %nci$n con másdeiniciones. La seg%nda orma s$lo permite %na.

    : +*-?)/  7orec5r@595

    13*

  • 8/19/2019 Cosas de TS

    72/154

    *+,'(+ 7orec5r@595 MJ: &'/+>: +*-?)/*+,'(+ 7orec5r@595 MJ:+*-?)/:&'/+>*+,'(+ 7orec5r@595 MJ:+:+

    /)'*/+ 7orec5r@595

    0emos sobrecargado la +nction %ncion con otra deinici$n. 0ay %e tener en c%enta %e enel tipo no hay %e deinir %na %nci$n %e englobe a las demás.

    .>.& =einici$n de %nci$n por parámetro

    hora imagina %e tenemos %na %nci$n c%al%iera %e tiene como parámetro otra %nci$n pero con %na determinada deinici$n. DC$mo lo haramos

    *+,'(+ eXeHp6oM48c: MJ: &'/+> C +*-?)/:

  • 8/19/2019 Cosas de TS

    73/154

  • 8/19/2019 Cosas de TS

    74/154

    *+,'(+ e7peci56iW595M85He: e7pe: &'/+>*+,'(+ e7peci56iW595M85He: &'/+>: +*+,'(+ e7peci56iW595M85He: &'/+>: +*-?)/ 

    /)'*/+ 0

    (ras los dos p%ntos no se ha especiicado el tipo del parámetro4 sino directamente el valor como cadena de caracteres.

    =e esta orma si invocamos la %nci$n e introd%cimos como arg%mento el valor especiicadoespeK4 se %sara ecl%sivamente esa deinici$n de %nci$n.

    0ay %e tener en c%enta %e si %samos este tipo de deiniciones especiali,adas4 siempre tiene%e haber %na %e no lo sea y %e englobe a las demás.

    Esto no es válido*+,'(+ e7peci56iW595M85He: e7pe: &'/+>*+,'(+ e7peci56iW595M85He: +*-?)/: +*+,'(+ e7peci56iW595M85He: &'/+>: +*-?)/ 

    /)'*/+ 0

    M no lo es por%e la seg%nda deinici$n tiene como parámetro %n nm"er   el c%al no escompatible con string. s% ve, es necesaria %na tercera deinici$n %e es la %e contendrá el c%erpode la %nci$n con la implementaci$n de la misma.

    G.1  (o"parando 5uncionesLas %nciones se comparan de la misma orma %e se sobrecargan. )implemente deben

    coincidir en nAmero de parámetros4 tipo de los mismos y devolver el mismo tipo de dato. Los tiposno han de ser eactos4 basta con %e sean compatibles.

  • 8/19/2019 Cosas de TS

    75/154

    Isamos el m"todo

    n%meros.ilter56 %e eige como arg%mento %na %nci$n con 3 parámetros: los dos primerosson nAmeros y el Altimo del tipo Array.

    DEs obligatorio pasarle %na %nci$n con esa deinici$n Gealmente no. Como arg%mentoacepta %na %nci$n con %n máimo de 3 parámetros4 por lo %e si s$lo nos interesa constr%ir %na%nci$n con %n s$lo parámetro podemos hacerlo.

    8Hero7.6terMMiteH C co87o6e.6o@MiteH

    1&&

  • 8/19/2019 Cosas de TS

    76/154

    1. *nu"erados

    1.1 IntroducciónLos en%merados 5o enms6 son %n tipo derivado de nm"er  %e relacionan %n nombre literal

    con %n nAmero determinado. Es %na orma más amigable %e el %so de nAmeros en determinadoscasos.

    )i %eremos manejar %na lista de animales podramos asociar cada %no con %n nAmero y %sar 

    el mismo para reerenciarlos. O bien podramos g%ardar el nombre del animal como string . #ero esono nos permite %e la lista sea inamovible ni limitada y4 además4 es poco manejable. )i declaramos%n enm con los nombres y los mismos se asocian de orma a%tomática a %n nAmero4 estamosconsig%iendo lo %e %eremos.

    )+*- A8iH56 $erro G5to #o8eXo

    La mecánica es la misma %e la de los estáticos. #ara acceder a los valores del enm  seescribe el nombre del enm seg%ido de %n .K 5p%nto6 y desp%"s el nombre de %no de los contenidos.

  • 8/19/2019 Cosas de TS

    77/154

    )+*- A8iH56 $erro G5to #o8eXo

    #odemos obtener el nombre del animal como string  si conocemos s% nAmero.

  • 8/19/2019 Cosas de TS

    78/154

    11. (lases

    11.1 Kué es una clase•   Nota.&n este tema ha"lamos de mtodos para re+erirnos a las +nciones de na clase.

    Ina clase representa algo de la realidad tangible o no4 como p%ede ser %na persona4 %na%tom$vil4 %na vivienda o %na idea. Gealmente es %na abstracci$n de esa realidad.

    #ara entender bien el concepto de clase debes pensar en %e es como %na ábrica de cosas.Esta ábrica constr%ye los objetos para los %e está diseFada como %na lnea de prod%cci$n decoches.

    Ina clase es similar. )e diseFa para ser %n molde del %e desp%"s saldrán objetos a partir de"l. (odos los objetos comparten entre s el mismo diseFo p%es todos se han constr%ido a partir delmismo molde.

    En la programaci$n orientada a objetos el molde sera %na clase y los objetos creados a partir de "l las instancias de esa clase.

    La orma de decir %e %na variable es del tipo de %na clase es de la misma orma %e tipamos%na variable. las clases tambi"n se les s%elen llamar p%es realmente se comportan como %n tipo dedatos.

    11.2 (reación de clases)e %sa la palabra reservada class.

    ,&& $er7o85

    La convenci$n de nombre para las clases es la primera letra de cada palabra es enmayAsc%las. Es lo %e se conoce como lower#amel#ase 

    2ás inormaci$n: http://es.?i

  • 8/19/2019 Cosas de TS

    79/154

    El sig%iente paso es4 como hemos hablado en anteriores apartados4 iniciali,ar la variable.hora mismo el valor de esa variable es nde+ined . #ara iniciali,arla se %sa el operador new seg%idodel nombre de la clase y de par"ntesis. Este operador reserva %n espacio de memoria para representar al objeto.

    5pe66i9o!: &'/+>

    El constr%ctor de la clase 5ersona ahora tiene como parámetros obligatorios el nombre y el primer apellido. El seg%ndo apellido es opcional.

  • 8/19/2019 Cosas de TS

    80/154

    11.&.1 El estado

    Los atrib%tos de %na clase son variables %e se declaran dentro de la propia clase.

    )eg%imos constr%yendo la clase 5ersona. (enemos %e pensar %" caractersticas tiene %na persona c%al%iera4 %" es lo %e nos deine. En este caso hemos optado por s% nombre y apellidos.(ambi"n podra ser el =9B4 alt%ra4 peso4 todo lo %e %eramos o necesitemos.

    ,&& $er7o85 8oHre: &'/+>5pe66i9o1: &'/+>5pe66i9o!: &'/+>,(+&'/*,'(/M8oHre: &'/+> 5pe66i9o1: &'/+> 5pe66i9o!: &'/+>

    0emos declarado s%s atrib%tos pero no están iniciali,ados. Lo hacemos en el constr%ctor.

    ,&& $er7o85 8oHre: &'/+>5pe66i9o1: &'/+>5pe66i9o!: &'/+>,(+&'/*,'(/M8oHre: &'/+> 5pe66i9o1: &'/+> 5pe66i9o!: &'/+>

    '=&.8oHre 8oHre'=&.5pe66i9o1 5pe66i9o1'=&.5pe66i9o! 5pe66i9o!

    Como podemos ver lo %e se introd%ce como arg%mento al constr%ctor es lo %e en s%implementaci$n se le asigna a los atrib%tos. 9ormalmente c%ando instanciemos %na clase debemosiniciali,ar s% atrib%tos p%es es lo %e va a deinir a ese objeto en partic%lar y lo va a dierenciar delresto de objetos de la misma clase.

    0ay %e p%nt%ali,ar %e las clases no aceptan atrib%tos opcionales.

    ,&& $er7o85 8oHre:&'/+>5pe66i9o1: &'/+>5pe66i9o!: &'/+>

    % %

    11.%.1.1 4tra 5or"a de declarar atributos

    Los parámetros de entrada de %n constr%ctor p%eden ser miembros de la clase 5atrib%tos6 deorma a%tomática sin declararlos de orma eplcita.

    ,&& $er7o85 ,(+&'/*,'(/M/ / /

    1;&

  • 8/19/2019 Cosas de TS

    81/154

    *?, Ho7tr5rNoHreM: 5pe66i9o1: &'/+>5pe66i9o!: &'/+>,(+&'/*,'(/M8oHre: &'/+> 5pe66i9o1: &'/+> 5pe66i9o!: &'/+>

    '=&.8oHre 8oHre'=&.5pe66i9o1 5pe66i9o1'=&.5pe66i9o! 5pe66i9o!

    Ho7tr5rNoHreM:

  • 8/19/2019 Cosas de TS

    82/154

  • 8/19/2019 Cosas de TS

    83/154

    En el caso de %e lo %semos dentro de %na %nci$n.

    *+,'(+ eXeHp6oTi7M '=& %% +(eXeHp6oTi7M

    =e n%evo this es window  por%e ejemplo-his()  no pertenece a ningAn objeto de ormaeplcita4 por lo %e es parte de window.

    El operador new cambia este comportamiento y hace %e el conteto sea la instancia.

    *+,'(+ eXeHp6oTi7M '=& %% (?;),'. L +&'+,.

  • 8/19/2019 Cosas de TS

    84/154

    1*!

  • 8/19/2019 Cosas de TS

    85/154

    11.' *ncapsula"iento(odo miembro de %na clase es pAblico por deecto. Esto signiica %e es accesible desde

    %era de la clase. #ara hacer %e %n miembro no lo sea4 hay %e declararlo como privado. Las

     palabras reservadas son p"lic y private. 9ormalmente los atrib%tos deben ser siempre privados y la orma de acceder a ellos es

    mediante m"todos pAblicos llamados getters y setters.

    ,&& $er7o85

    ///

     %%

    s4 si creamos %na instancia de la clase 5ersona llamada carlos y hacemos esto:

    c5r6o7.8oHre #5r6o7

     9os dara %n error p%es no es accesible desde %era.

    Lo mismo oc%rre con los m"todos.

    ,&& $er7o85 %%.../

  • 8/19/2019 Cosas de TS

    86/154

  • 8/19/2019 Cosas de TS

    87/154

    11.;.1 Vetters y setter implcitos

    Es %na orma m%y interesante de constr%ir  getters  y  setters  p%es sintácticamente soninvisibles a la hora de acceder a los atrib%tos.

    En el apartado anterior hacamos esto:

    *?, @etNoHreM:&'/+>/)'*/+ '=&.8oHre

    *?, 7etNoHreM8oHre:&'/+>:)' 8oHreM: &'/+>/)'*/+ '=&.d8oHre

    *?, &)' 8oHreM 8oHre: &'/+>  '=&.d8oHre 8oHre

     Nota: No se especi+ica el tipo void como devolcin de los setters impl!citos, da error de

    compilacin.

    #ara %sarlos basta con acceder al atrib%to como si "ste %era pAblico.

  • 8/19/2019 Cosas de TS

    88/154

    s combinamos la simple,a sintáctica del acceso a atrib%tos pAblicos j%nto con la practicidad de hacerlo mediante m"todos.

    11.0 LerenciaD%" es la herencia #odemos imaginar %e en el m%ndo eisten dierentes tipos de cosas %e

    tienen estados y comportamientos com%nes como podran ser los mameros4 los a%tom$viles o lostel"onos. La herencia nos provee %n mecanismo para relacionar las distintas clases.

     9%estra clase ejemplo 5ersona se reiere a algo m%y general. #odramos especiicar más. )iestamos reali,ando la gesti$n de %n a%la4 nos damos c%enta de %e en ella hay al%mnos y proesoresy ambos son personas. =e esta orma estamos agr%pando dos tipos de cosas bajo %n mismocomportamiento y estado.

    Con todo ello podramos crear %na clase llamada  Almno  y otra llamada  5ro+esor   %eheredaran de 5ersona por lo %e las clases hijas 5as se les llamas a las clases %e heredan de otra6obtendran todo lo %e es y hace el padre 5as se les llama a las clases de las %e se hereda6.

    #ara hacerlo hay %e %sar la palabra reservada extends.

    ,&& $er7o85,&& A6H8o ):')+& $er7o85 ,&& $ro4e7or ):')+& $er7o85

    •   Nota: no existe la herencia m8ltiple en -. &sto es 9e na clase slo pede heredar 

    de na sola clase a la ve4. No con+ndir con constrir na jerar9!a pes na clase pede heredar de varias si entre todas se relacionan de +orma vertical.

    LI29O   #EG)O9   22B7EGO   )EG 'B'O

    hora tanto  Almno  como 5ro+esor  obtendran todo lo %e es y hace 5ersona. 8%eno4 notodo realmente p%es a% entra en j%ego el princio de oc%ltaci$n. (odo lo declarado como pAblico sehereda. (odo lo declarado como privado no se hereda y no es accesible desde la clase hija. 0ay %ntercer modiicador4 llamado protegidoK 5 protected 6 %e no está soportado en (). )i declaramos %nmiembro como protected 4 las clases hijas lo heredan pero no es accesible desde %era.

    11.*.1 El operador s%per 

    0emos visto el operador this4 %e hace reerencia a la clase propia donde lo %semos.

    Eiste otro llamado  sper   %e hace reerencia a la clase padre desde donde estemosheredando. Con "l podemos reerenciar miembros de la clase padre siempre y c%ando no sean

     privados.

    Bmaginemos %e %eremos %e4 además de nombre y apellidos4 %n al%mno tenga %n nAmerode al%mno.

    1>

  • 8/19/2019 Cosas de TS

    89/154

    ,&& A6H8o ):')+& $er7o85

    / 5pe66i9o1: &'/+> 8HeroA6H8o: +*-?)/

    5pe66i9o!: &'/+>

    &*)/M8oHre 5pe66i9o1 5pe66i9o! '=&.8HeroA6H8o 8HeroA6H8o

    D%" ha pasado a%

    0emos creado %n constr%ctor para  Almno en el %e admite %n parámetro más %e el de 5ersona para incl%irle la reerencia.

    0emos llamado al constr%ctor de 5ersona pasándole como arg%mento lo %e espera. Es m%y

    importante recalcar %e la primera lnea de c$digo del constr%ctor de %na clase %e hereda de otra es%na llamada sper() con los arg%mentos %e sean. =e lo contrario dará error de compilaci$n. M estotiene s% l$gica. C%ando creamos %n Almno realmente tambi"n estamos creando %na 5ersona por lo%e para hacerlo se debe llamar al constr%ctor de 5ersona.

    =esp%"s de la llamada sper() podemos g%ardar la reerencia.

    )i 5ersona tiene el constr%ctor sobrecargado4 la llamada sper() p%ede ser a c%al%iera de lasdeiniciones del constr%ctor. )implemente hay %e c%mplir con los parámetros %e eige.

    =esde otros m"todos podemos llamar a los m"todos del padre con el mismo  sper . En este

    caso no se eige %e sea la primera llamada.,&& A6H8o ):')+& $er7o85

      / 5pe66i9o1: &'/+> 8HeroA6H8o: +*-?)/5pe66i9o!: &'/+>

    &*)/M8oHre 5pe66i9o1 5pe66i9o!'=&.8HeroA6H8o 8HeroA6H8o

    *?, Ho7tr5rRe4ere8ci5M:

  • 8/19/2019 Cosas de TS

    90/154

    0ay %e seFalar %e %n objeto de %na clase hija es tambi"n del tipo de todas s%s clases padre.

    En n%estro ejemplo:

    LI29O   #EG)O9   22B7EGO   )EG 'B'O

    )i instanciamos Almno obtendramos %n objeto del tipo Almno pero %e a s% ve, tambi"nsera del tipo #ersona4  ?ami+ero  y er@ivo. DGec%erdas la llamada  sper()  en el constr%ctor de

     Almno Con eso se llama al constr%ctor de  5ersona por lo %e podemos ded%cir %e estamoscreando tambi"n %na instancia de 5ersona y as s%cesivamente. 9o estamos creando & instanciasdistintas4 s$lo %na pero con las caractersticas de todas las s%perclases.

    11.*.! )obreescrit%ra

    0eredar los miembros de la clase padre no nos obliga a %tili,arlos tal y como son. #odemosredeclarar los atrib%tos y los m"todos llámandolos de la misma orma en la clase hija. Eso s4 conciertas restricciones.

    Los miembros deben tener el mismo modiicador de visibilidad por lo %e si en la s%perclaseestá declarado como p"lic o private4 en la clase hija se debe declarar ig%al.

    ,&& $er7o85 *?, Ho7tr5rNoHreM:

  • 8/19/2019 Cosas de TS

    91/154

    &*)/.Ho7tr5rNoHreM

    M4 posteriormente4 implementar el c$digo %e creamos conveniente.

    Es m%y Atil para ampliar %na %ncionalidad %e proviene de la s%perclase. #or motivos de

    diseFo podemos necesitar %e la clase hija realice más acciones en el mismo m"todo además de las%e ya se reali,aban en la implementaci$n del m"todo del padre.

    11.7 Agregación co"posición#ara empe,ar hay %e concretar %e las dierencias entre agregaci$n y composici$n son

    concept%ales y no se relejan en el c$digo.

    )i en la herencia establecamos %na relaci$n de es-%n4 en la composici$n la relaci$n es la de

    %sa-%n.C%ando empe,amos a ver los miembros de %na clase4 p%dimos observar %e no s$lo podran

    declararse variables de tipos primitivos o envolt%ra4 sino %e podamos %sar los propios.

    ,&& $er7o85 /

  • 8/19/2019 Cosas de TS

    92/154

    11.8 $oli"or5is"oCom s% nombre indica 5m%chas ormas6 es la c%alidad %e tiene %n objeto de %n tipo de

    comportarse como de otro tipo en %n momento determinado.

    Gecordando el ejemplo:

    LI29O  #EG)O9  22B7EGO  )EG 'B'O

    #odemos hacer esto:

  • 8/19/2019 Cosas de TS

    93/154

    Los casting  se hacen encerrando el tipo al %e %eremos convertir entre ST seg%ido de lavariable %e %eremos convertir.

    En el caso en el %e %eramos %sar %n m"todo del tipo de la variable a la %e %eremosconvertir directamente sin asignarlo a otra variable tenemos %e %sar los par"ntesis.

    ,&& #5cerM:

  • 8/19/2019 Cosas de TS

    94/154

    11.1 igadura din"icaDEn %" consiste

    ,&& A

    Ho7tr5rLetr5 M 56ertMA

    ,&& B ):')+& A Ho7tr5rLetr5 M

    56ertMB

    (enemos dos clases: A y 0. 0 hereda de A. mbas tienen deinido el m"todo mostrarLetra().En A la ejec%ci$n de ese m"todo m%estra %n alert con la letra y en 0 m%estra la letra 8.

    )i hacemos esto:

  • 8/19/2019 Cosas de TS

    95/154

    %nci$n nos ejec%tará el del tipo introd%cido y no el de er@ivo. Esto está estrechamente relacionadocon el polimorismo.

    11.11 instance45 Es %n operador binario m%y Atil para el manejo de clases. Compr%eba si %n objeto es de %n

    tipo determinado. )$lo %nciona con los tipos reerencia4 es decir4 no %nciona con los primitivos.

  • 8/19/2019 Cosas de TS

    96/154

    )on dos instancias distintas de 5ersona en la %e s%s datos no tienen relaci$n entre s. )icambio el nombre de jose4 carlos seg%irá ig%al %e antes.

    Eiste %n modiicar llamado  static  %e es %na palabra reservada del leng%aje. Con "lconseg%imos %e %n miembro sea accesible sin crear instancias de la misma.

    ,&& $er7o85 % ... %

    *?, &'', Ho7tr5rNoHreM:

  • 8/19/2019 Cosas de TS

    97/154

    11.13 (lases literalesLas clases se p%eden representar como %n objeto. (anto los atrib%tos como los m"todos

     p%eden ser parte de %n objeto estándar de (). La orma más ácil de representarlo es mediante %nobjeto literal encerrando entre llaves. Entre las restricciones están el no poder hacer los miembros

     privados ni estáticos.

    ,&& $er7o85 8oHre: &'/+>e959:+*-?)/

    e959: +*-?)/  +) $er7o85M

  • 8/19/2019 Cosas de TS

    98/154

  • 8/19/2019 Cosas de TS

    99/154

    #odemos tener como máimo dos indeaciones: %na por string  y otra nm"er.

    ,&& Diccio85rio Zi89eJ: &'/+>[: &'/+>Zi89eJ: +*-?)/[: &'/+>

    La Anica restricci$n es %e el tipo dev%elvo por la n%m"rica sea compatible con el de string .

    ,&& Diccio85rio Zi89eJ: &'/+>[: &'/+>Zi89eJ: +*-?)/[: +*-?)/ %% E//(/

    El tipo dev%elto por 2index: nm"er3  es nm"er   %e no es compatible con  string .

    La compatibilidad se gestiona de la misma orma %e ya hemos est%diado lascompatibilidades de primitivos4 objetos4 etc.

    =e esta orma podramos crear lo %e en otros leng%ajes4 como #0#4 se llaman arraysasociativos4 donde el ncide no es n%m"rico4 sino %na cadena de caracteres.

    1!

  • 8/19/2019 Cosas de TS

    100/154

    12. Inter5aces

    12.1 IntroducciónD%" son las interaces )on meros contratosK %e se hacen para %na clase. Gealmente las

    interaces son listas de miembros %e obligatoriamente debe tener la clase %e implementa esaintera,.

    D#ara %" se %til,an las interaces Ciertamente es %n debate abierto en el m%ndo del diseFo

    de aplicaciones. 2i opini$n se deberan %sar para dar %n comportamiento comAn a clases %e no p%eden tener 5o no tiene sentido %e tengan6 relaci$n por herencia.

    #odemos tener la clase 5ersona y la clase #oche. Es evidente %e encontrar %na relaci$n por herencia entre esas dos clases no s$lo es complicado4 sino %e carece de sentido. #ero lo %e s escierto es %e p%eden tener algAn comportamiento comAn. (antos las personas como los coches sedespla,an. mbos podran tener %n m"todo llamado despla4ar() %e haga moverse al objeto enc%esti$n.

    hora imaginemos %e estamos desarrollando %n j%ego en el %e hay partes m$viles en elescenario como son personas y coches. En %n momento dado necesitamos %e %n gr%po de personasy de coches se m%evan. )i ambas clases implementan la intera,  espla4a"le4 basta con recorrer todos los %e %eramos mover y ejec%tar el m"todo despla4ar() sin importar si es %na persona o %ncoche4 p%es la implementaci$n del m"todo estará deinida en cada clase de %na orma partic%lar.

    12.2 -eclaración e i"ple"entación#ara crear %na intera, se %sa la palabra reservada inter+ace.

    +')/,) De7p65W56e

    #ara %e %na clase implemente %na intera, se %tili,a la palabra reservada implements:

    ,&& $er7o85 -)-)+'& De7p65W56e   %%...

    La intera, espla4a"le está vaca por lo %e no está obligando a la clase  5ersona a hacer nada. #ero si en espla4a"le deinimos %n m"todo:

    +')/,) De7p65W56e

    9e7p65W5r M:

  • 8/19/2019 Cosas de TS

    101/154

    Obligamos a la clase 5ersona a implementarlo. )i no lo hace dará error de compilaci$n. #araello hay %e c%mplir eactamente con la deinici$n del m"todo. )i dev%elve %n nm"er  no podemosimplementar ese m"todo devolviendo %n string . En este caso no dev%elve nada por lo %e as debeser:

    ,&& $er7o85 -)-)+'& De7p65W56e %%...*?, 9e7p65W5rM:

  • 8/19/2019 Cosas de TS

    102/154

  • 8/19/2019 Cosas de TS

    103/154

  • 8/19/2019 Cosas de TS

    104/154

    !!

  • 8/19/2019 Cosas de TS

    105/154

    13. !enéricos

    13.1 IntroducciónLos gen"ricos permiten parametri,ar directamente las clases e interaces. )on %n paso más en

    la abstracci$n.

    0asta ahora habamos deinido clases no gen"ricas como #oncesionario:

    ,&& #o8ce7io85rio

    Esta clase es capa, de englobar todos los concesionarios de las marcas de los coches. En ellairemos g%ardando %na lista de los coches de cada concesionario.

    D#ero para %" marcas de a%tom$viles diseFaremos la clase #odemos hacerlas para todascon el %so de gen"ricos.

    ,&& #o8ce7io85rioTC

    /

  • 8/19/2019 Cosas de TS

    106/154

    Clase original:

    ,&& #o8ce7io85rioTC/

  • 8/19/2019 Cosas de TS

    107/154

    ,&& Aio8 ,&& AtoHoi6

    ,&& 31, ):')+& Aio8

  • 8/19/2019 Cosas de TS

    108/154

  • 8/19/2019 Cosas de TS

    109/154

  • 8/19/2019 Cosas de TS

    110/154

    1%. Tipado estructural

    1%.1 Os sobre la co"paración de ob6etosEl tipado en () es estr%ct%ral y no nominal. Esto %iere decir %e los tipos no se dierencian

     por s% r%ta c%aliicada la c%al incl%ye el nombre4 sino por s% estr%ct%ra interna. =e esta orma lacomparaci$n se hace miembro a miembro en nombre y tipo.

    1%.2 (o"parando clasesEl tipado estr%ct%ral permite comparar clases o intercambiarlas a%n%e no tengan %na

    relaci$n de herencia entre ellas.

    Los miembros estáticos y el constr%ctor se ignoran a la hora de la comparaci$n.

    ,&& $er7o85 &'', EV: +*-?)/8oHre: &'/+>

    ,&& $erro

    8oHre: &'/+>

  • 8/19/2019 Cosas de TS

    111/154

  • 8/19/2019 Cosas de TS

    112/154

    Esto es correcto:

    +')/,) A 85He: &'/+>

    +')/,) B 85He: &'/+>

  • 8/19/2019 Cosas de TS

    113/154

    En n%estro ejemplo4 la clase 0 debera implementar el m"todo hacerAlgo(). Los estáticos y privados no se tienen en c%enta del mismo modo %e en %na intera, no se p%eden declarar.

    1%.' Inter5aces ,erendando de clasesEn () podemos hacer %e %na intera, herede de %na clase. En este caso la intera, hereda los

    miembros pero no s% implementaci$n por%e %na intera, no p%ede contener implementaciones.

    ,&& A *?, 85He: &'/+>

    +')/,) I ):')+& A

    D%" oc%rrira si la clase contiene miembros Como hemos visto en apartados anteriores4

    a%n%e los miembros privados no se heredan4 realmente s están presentes en las clases hijas a%n%eno accesibles. #or ello la intera, lo contendra pero con %na c%riosa consec%encia:

    ,&& A /

    +')/,) I ):')+& A

    )$lo las clases %e hereden de A podrán implementar la intera, F  y no otras p%es serán lasAnicas %e contengan el miembro privado original.

    ,&& A/

    +')/,) I ):')+& A

    ,&& B ):')+& A -)-)+'& I %% C(//),'(,&& # -)-)+'& I %% E//(/. C N( )& &*?,&) ) A

    2%estra %n error indicando %e #  no está implementando todos los miembros de la intera, F 4concretamente el atrib%to nom"re. %n%e declaremos %n atrib%to nombre de tipo string  y privadoen la clase C4 no conseg%iramos %e compilara. El Anico %e le sirve es el de la clase y s$lo se

     p%ede conseg%ir heredando de ella.

    !!

  • 8/19/2019 Cosas de TS

    114/154

    1'. (ontrol de errores

    1'.1 Introducción Eiste %na orma de capt%rar los errores %e se prod%,can en n%estra aplicaci$n y darle

    resp%esta a los mismos de %na orma controlada. En otros leng%ajes se les llama ecepciones pero en() se llaman errores.

    #ara capt%rar %no se %tili,a la estr%ct%ra try6catch4 encerrando en el try el c$digo s%sceptible

    a allar.

    '/ %% ,>(

    ,',= Me %% '/'/ ) )//(/

    )i algo de lo %e se ejec%ta alla y lan,a %na ecepci$n4 se ejec%tará el c$digo encerrado en el blo%e catch. El parámetro de catch es del tipo &rror  pero no se tipa de orma eplcita. )i se hicieraallara al compilar.

    1'.2 Tipos de errores0ay alg%nos ya predeinidos %e res%ltan m%y Atiles. Cabe decir %e todos heredan de &rror .

     &val&rror 

    Bndica %n error al ejec%tar la %nci$n global eval56.

     >ange&rror 

    Bndica %e estamos tratando de acceder a %n ndice %e no eiste. Es aplicable a los arrays y alos objecs.

     >e+erence&rror 

    Bndica %e estamos reerenciando a %na variable no declarada.

    !!!

  • 8/19/2019 Cosas de TS

    115/154

    yntax&rror 

    Bndica %e hay %n error de sintais.

    -ype&rror 

    Bndica %e estamos tratando de acceder a miembros de algo %e vale nll  o %e no hemos pasado la variable con el tipo correcto como arg%mento.

    (odos comparten %na serie de atrib%tos como el message4 %e describe el error de ormaliteral.

     9ormalmente4 los navegadores modernos describen estos errores de orma a%tomática en s%consola sin necesidad de %e el desarrollador lo tenga %e hacer de orma eplcita.

    1'.3 an)ando erroresEn el blo%e catch se p%ede ejec%tar el c$digo %e se desee4 como por ejemplo escribir en la

    consola para obtener inormaci$n sobre "l. %n%e tambi"n se p%ede lan,ar el error con el operador throw.

    Lan,ar %n error consiste en elevarlo hacia arriba coniando en %e eista %n try6catch %e lotratará de orma adec%ada.

    *+,'(+ eXeHp6oErrorM:

  • 8/19/2019 Cosas de TS

    116/154

  • 8/19/2019 Cosas de TS

    117/154

  • 8/19/2019 Cosas de TS

    118/154

    10. -4O

    10.1 IntroducciónLa manip%laci$n de las páginas ?ebs es %no de los %sos más habit%ales %e se le da a J).

    2ediante %na #B llamada =oc%ment Object 2odel 5=O26 podemos moldear a n%estro g%sto elcontenido de doc%mentos 0(2L y 2L. Esta #B nos proporciona %na serie de objetos conatrib%tos y m"todos m%y Atiles a la hora de obtener inormaci$n de la estr%ct%ra de la página y s%

    contenido.=oc%mentos 0(2L 50(2L y 2L6 se dividen en nodos jerár%icos4 de orma %e

    siempre %no está dentro de otro s%perior. Estos están representados4 entre otros4 por eti%etas 0(2Lcomo SaT o SdivT. El objeto window es el %e está posicionado en la parte s%perior de esta jerar%a.Pste contiene al objeto docment  %e el %e posee los m"todos necesarios para la manip%laci$n del=O2.

    http://es.?i

  • 8/19/2019 Cosas de TS

    119/154

    10.2.1.1 get*le"entPIdMN

    )eleccionar el elemento c%yo atrib%to id coincida con el proporcionado como arg%mento.

  • 8/19/2019 Cosas de TS

    120/154

  • 8/19/2019 Cosas de TS

    121/154

    17. *ventos

    17.1 IntroducciónLos eventos son s%cesos %e oc%rren d%rante la ejec%ci$n de la aplicaci$n. #%eden dispararse

    debido a %na interacci$n del %s%ario o como resp%esta a determinadas acciones de n%estro programa.

    C%ando %n %s%ario hace click  del rat$n sobre %n bot$n o c%ando p%lsa %na tecla4 o c%ando laaplicaci$n ha terminado de cargar4 se lan,an eventos.

    #ara ciertos eventos nos interesa darle %na resp%esta mediante %na %nci$n. )on los llamadoshandlers 5manejadores6 y para ello hay %e asociar %n listener  5oyente6 a los elementos s%sceptiblesde la