FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Probando a construir clases en Harbour
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM

Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 04: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 (fw): Select all Collapse
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 (fw): Select all Collapse
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. :-)

Saludos

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 04:17 PM
Jose Vicente, y así qué te devuelve?

Code (fw): Select all Collapse
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
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM

Re: Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 05: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 :-)

Es eso lo que no entiendo.

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 08:14 PM
Jose Vicente, tal y como tú lo tenías, seguramente funcionase si lo hicieses así
Code (fw): Select all Collapse
? 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
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM

Re: Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 08:18 PM
cnavarro wrote:Jose Vicente, tal y como tú lo tenías, seguramente funcionase si lo hicieses así
Code (fw): Select all Collapse
? 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
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Probando a construir clases en Harbour

Posted: Sat Mar 20, 2021 08: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

Continue the discussion