Page 6 of 10

Re: *** Curso de C para programadores Harbour.

PostPosted: Mon Apr 05, 2021 3:43 pm
by cnavarro
xmanuel wrote:
Code: Select all  Expand view


   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   local nLen :=  Len( aNums )
   hb_ForNext( 1, nLen, < | i |
                                    nSum += aNums[ i ]
                                    Return nSum  // Seguramente esta linea sobra ya que nSun es una variable local de la función
                                > )
   ? nSum
 

Lo que devuelva es lo de menos, el tema es que al definir los codeblocks asi, han de tener un return ...

Re: *** Curso de C para programadores Harbour.

PostPosted: Mon Apr 05, 2021 4:55 pm
by VictorCasajuana
xmanuel wrote:... Lógicamente para poder usar los recursos que te da Harbour previamente tienes que saber que existen ...


ahí es donde a veces voy un poco "perdido", veo a Harbour como una herramienta muy potente pero para aprenderlo has de indagar muchísimo, el no tener una documentación centralizada con "Todo" hace que pierda potencia el propio lenguaje.

cnavarro wrote:Alguna cosilla más

Code: Select all  Expand view

   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   
   hb_ForNext( 1, Len( aNums ), { | i | nSum += aNums[ i ] }  )
   ? nSum
 

Code: Select all  Expand view

   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   hb_ForNext( 1, Len( aNums ), < | i |
                                    nSum += aNums[ i ]
                                    Return nSum
                                > )
   ? nSum
 


este tipo de funciones es muy potente utilizarlas, y las utilizo, pero cada vez me doy más cuenta que leo más código que escribo, y cuando pasas rápido por este tipo de código has de hacer una pequeña pausa para entenderlo, en cambio un for each o for next igual le da más semántica a la hora de volver a leer el código o que otros programadores lo lean. Por supuesto no digo que el código sea mejor ni peor, es una opinión personal sobre la lectura de código, que por cierto, Cristobal, gracias a los Scalar he ganado muchísimo en darle semántica al código, gracias por tus consejos! :wink:

Re: *** Curso de C para programadores Harbour.

PostPosted: Mon Apr 05, 2021 5:11 pm
by hmpaquito
Coincido con Victor: Prefiero claridad a linealidad



Code: Select all  Expand view
IF A > B
   ? "ES A"
ELSE
   ? "ES B"
ENDIF


Es más claro que

Code: Select all  Expand view
? If( A > B, "ES A", "ES B")


Y posibilita que en el futuro se pueda ampliar, manteniendo la claridad, aparte que permite una mejor insercion de comentarios

Code: Select all  Expand view
IF A > B
   // Comentario el por qué de A
   ? "ES A"
ELSE
   ? "ES B"

ENDIF
 

Eso no quita que utilizo los dos sistemas


Hablando de claridad... y de arrays... ¿ No tendrá alguien una funcion para comparar arrays de dos dimensiones y que devuelva las diferencias, preferentemente las posiciones ?

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 7:16 am
by xmanuel
Efectivamente puede parecer que pierdes claridad con la programación lineal, que casi puede llegar a la ofuscación, pero cuando te acostumbras te da igual y en muchas ocasiones ganas rapidez.
Sobre todo en los grandes bucles deberías buscar rapidez más que legibilidad...

Pero bueno, como se dice por aquí "pa gustos colores..." :shock:

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 7:31 am
by xmanuel
Volviendo al curso, como sabeis consta de:
* Un manual que iré entregando por temas.
* Un foro, que muy amablemente, nos ha hecho Cristóbal Navarro. En el foro iremos haciendo preguntas y respondiéndolas y donde pondremos muchos ejemplos.
Al curso podrá apuntarse todo el mundo ya que no hay asistencia física, todo será virtual.

Tiene un coste de 30 euros.
La primera entrega será el dia 15 de Abril y constará de los 11 primeros temas que son puramente del Lenguaje C aunque hago referencias continuas a Harbour. Por ejemplo para el manejo de la memoria haremos uso de hb_xgrab, hb_xalloc y hb_xfree y no de las disponibles en C, ya se explicará porqué.

Este es el temario por si a alguien le interesa:

Harbour y Lenguaje C.

1. Prólogo y propósito del curso.
2. Herramientas necesarias para el curso.
3. Introducción. Un poco de C.
4. Operadores.
5. Estructuras de control.
6. Tipos de datos elementales de C
7. Tipos de datos estructurados: Tablas, arreglos o arrays en C. Vectores, matrices y tablas multidimensionales.
8. Tipos de datos estructurados: estructura, uniones y enumeraciones.
9. Creando nuestros propios tipos con typedef.
10. Punteros en C.
11. Reserva y liberación de memoria dinámica.

12. Algunos conceptos básicos sobre la Máquina virtual (VM), pila (stack) y la Tabla de símbolos (symbol table) de Harbour.
13. Cómo compilar código C en nuestros PRG
14. Sistema extendido y el Item API.
15. Crear funciones en C que se puedan usar desde PRG.
16. Sistema extendido
Paso de parámetros.
Retorno de variables.
Paso de variables por referencia.
17. El Item Api. Ampliando el mundo del Sistema Extendido.
18. Manipulación de arrays de entrada y salida.
19. Manipulación de tablas hash
20. Manipulación de estructuras, uso de funciones puente.
21. Uso de funciones librerías externas.
22. El mundo al revés: Llamada desde C a funciones de Harbour?
23. Pon una DLL en tu vida: “Wrappear” funciones de una librería dinámica.
24. Creando nuestras propias librerías.

Espero que os guste y todavía estáis a tiempo de que rer incluir algo más.

El correo para apuntarse con las condiciones explicadas es: hdoenv arroba gmail punto com

Saludos a todos

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 4:41 pm
by jvtecheto
cnavarro wrote:
xmanuel wrote:
Code: Select all  Expand view


   local aNums         := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
   local nSum := 0
   local nLen :=  Len( aNums )
   hb_ForNext( 1, nLen, < | i |
                                    nSum += aNums[ i ]
                                    Return nSum  // Seguramente esta linea sobra ya que nSun es una variable local de la función
                                > )
   ? nSum
 

Lo que devuelva es lo de menos, el tema es que al definir los codeblocks asi, han de tener un return ...


Hola Cristobal , perdona pero probando este codigo tuyo, desconocia la funcion y este codeblock lo habia visto en mas ocasiones pero no lo habia probado.
Error que me da.
codeblocks1.prg(9) Error E0030 Syntax error "syntax error at '<'"


¿Que hago mal, el codigo es trivial, pero por si acaso.

Code: Select all  Expand view

function main()

     local aNums := { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
     local nSum := 0

     hb_ForNext( 1, Len( aNums ), < | i | nSum += aNums[ i ] return nSum > )

     ? nSum

return nil
 


Con codeblock normal la funcion se ejecuta correctamente.

Saludos.

Jose.

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 5:32 pm
by hmpaquito
Intenta asi:
Code: Select all  Expand view
hb_ForNext( 1, Len( aNums ), < | i | nSum += aNums[ i ]; return nSum > ) // Observa el ;

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 7:11 pm
by jvtecheto
Hola hmpaquito.

Tampoco funciona asi.

Voy a buscar informacion de estos codeblocks a ver si encuentro. :)

Saludos.

Jose.

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 10:11 pm
by AIDA
AUN NO EMPIEZA EL CURSO O ESTOY DESPISTADA :roll:

Saluditos :wink:

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 10:52 pm
by hmpaquito
jvtecheto wrote:Hola hmpaquito.

Tampoco funciona asi.

Voy a buscar informacion de estos codeblocks a ver si encuentro. :)

Saludos.

Jose.


José Vicente,

Ya he visto la movida. Parece ser que Harbour utiliza la sintaxis habitual, f.e.
Code: Select all  Expand view
{|| lo_que_sea }
para extended codeblock. Es xHarbour el que utiliza una sintaxis especial
Code: Select all  Expand view
<|| lo_que_sea >

Quizá hay gente usando Harbour con compatibilidad xHarbour a los que si se les ejecuta la sintaxis de xHarbour

Salu2

Re: *** Curso de C para programadores Harbour.

PostPosted: Tue Apr 06, 2021 11:58 pm
by cnavarro
jvtecheto wrote:Tampoco funciona asi.

Voy a buscar informacion de estos codeblocks a ver si encuentro. :)

Saludos.

Jose.


Jose Vicente, pon el ejemplo tal cual te lo indico, cada instruccion en una linea distinta como si de el desarrollo de una function se tratase ( al fin y al cabo lo es ), y que tenga un return al final ( sin puntos y comas al final de las lineas ), y me dices si te funciona o no

Code: Select all  Expand view

   local nSum  := 0
   hb_ForNext( 1, Len( aNums ), < | i |
                                    nSum += aNums[ i ]
                                    Return nSum
                                > )
   ? nSum
 

Re: *** Curso de C para programadores Harbour.

PostPosted: Wed Apr 07, 2021 8:10 am
by Antonio Linares
Para xHarbour este define es necesario:

#xtranslate \<|[<x,...>]| => {| <x> |

Ese código está incluido en FiveWin.ch

Re: *** Curso de C para programadores Harbour.

PostPosted: Wed Apr 07, 2021 8:41 am
by hmpaquito
Desaconsejado el uso de translate para obtener sintaxis de codeblock extendido con <||
Incluso desaconsejado desde hbCompat.ch

https://harbour.harbour-project.narkive ... -codeblock

Usar extended codeblock con la sintaxis habitual, es decir: {|| }

Re: *** Curso de C para programadores Harbour.

PostPosted: Wed Apr 07, 2021 10:22 am
by Antonio Linares
gracias Paco

Re: *** Curso de C para programadores Harbour.

PostPosted: Wed Apr 07, 2021 10:25 am
by hmpaquito
A mandar !