Probando a construir clases en Harbour

Probando a construir clases en Harbour

Postby jvtecheto » Sat Mar 20, 2021 4:03 pm

Hola amigos:

Pues eso probando a construir clases sencillitas , me pasa algo que no entiendo , en el codigo de abajo cuando doy
de alta un nuevo programador me ejecutar automaticamente la funcion contenida NivelAlcanzado(), sin embargo si la llamo
expresamente obtengo nil, que hago mal?

codigo de las clases.
Code: Select all  Expand view  RUN

CLASS TPersona

    DATA cName, nEdad

    METHOD NEW(nombre, edad) CONSTRUCTOR

ENDCLASS


METHOD NEW(nombre, edad) CLASS TPersona

    ::cName:= nombre
    ::nEdad:= edad

RETURN Self

CLASS TProgramador FROM TPersona

    DATA cLenguaje,nivel

    METHOD New(nombre, edad, Lenguaje, nivel) CONSTRUCTOR

    METHOD NivelAlcanzado()

ENDCLASS

METHOD New(nombre, edad, Lenguaje, nivel) CLASS TProgramador

    ::cLenguaje := Lenguaje
    ::nivel := nivel
    ::Super:New(nombre, edad)

Return Self

METHOD NivelAlcanzado() CLASS TProgramador

    SWITCH ::nivel
       CASE 9
          ? "Programador experto"
          Exit

       CASE 10
          ? "Programador Nivel Dios"
          Exit

       OTHERWISE
          ? "Programador en formacion"

    ENDSWITCH

Return Nil
 


Y luego creo un programador con
Code: Select all  Expand view  RUN

LOCAL oProgram1:= TProgramador():New("Linus Torvalds",51,"Lenguaje C", 10)

? oProgram1:cName, oProgram1:NivelAlcanzado()

 


La salida que obtengo es :
Programador nivel Dios
Linus Torvalds, Nil


o sea parece que la funcion se ejecuta al crear el objeto. Y luego NIL ¿Porque ?

No lo entiendo, no me llevo bien con las clases. :oops:

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Probando a construir clases en Harbour

Postby cnavarro » Sat Mar 20, 2021 4:17 pm

Jose Vicente, y así qué te devuelve?

Code: Select all  Expand view  RUN


METHOD NivelAlcanzado() CLASS TProgramador

   Local cRet   := ""
    SWITCH ::nivel
       CASE 9
          cRet := "Programador experto"
          Exit

       CASE 10
          cRet := "Programador Nivel Dios"
          Exit

       OTHERWISE
          cRet := "Programador en formacion"

    ENDSWITCH

Return cRet
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Probando a construir clases en Harbour

Postby jvtecheto » Sat Mar 20, 2021 5:19 pm

Hola Cristobal.

Muchisimas Gracias por tu ayuda.

asi como tu lo haces devuelve lo esperado.

Linus Torvalds Programador Nivel Dios.


Pero... No se puede construir un metodo que simplemente imprima algo por pantalla.,? y que no se ejecute automaticamente cuando se crea la clase?

Ya se que no es util, pero es ejemplo tipico de videos sobres clases en youtube
cuando crean una clase TCoche con el metodo Arranca() y te imprime "El coche ha arrancado " Jaja :D

Es eso lo que no entiendo.

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Probando a construir clases en Harbour

Postby cnavarro » Sat Mar 20, 2021 8:14 pm

Jose Vicente, tal y como tú lo tenías, seguramente funcionase si lo hicieses así
Code: Select all  Expand view  RUN

? oProgram1:cName
 oProgram1:NivelAlcanzado()    // no le pongas el ?, ya que lo hacías en el method
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Probando a construir clases en Harbour

Postby jvtecheto » Sat Mar 20, 2021 8:18 pm

cnavarro wrote:Jose Vicente, tal y como tú lo tenías, seguramente funcionase si lo hicieses así
Code: Select all  Expand view  RUN

? oProgram1:cName
 oProgram1:NivelAlcanzado()    // no le pongas el ?, ya que lo hacías en el method
 
Cierto Cristóbal.

Es redundante.

Muchas gracias.

Jose

Enviado desde mi POCOPHONE F1 mediante Tapatalk
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 600
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Probando a construir clases en Harbour

Postby cnavarro » Sat Mar 20, 2021 8:21 pm

Es por eso que lo veías en pantalla era el valor devuelto por la function ( method ), es decir: NIL ( de su return nil )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 66 guests