*** Curso de C para programadores Harbour.

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

Postby cnavarro » Mon Apr 05, 2021 3:43 pm

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 ...
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby VictorCasajuana » Mon Apr 05, 2021 4:55 pm

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:
--------
¿ Y porque no ?
¿ And why not ?
User avatar
VictorCasajuana
 
Posts: 194
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs

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

Postby hmpaquito » Mon Apr 05, 2021 5:11 pm

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 ?
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Postby xmanuel » Tue Apr 06, 2021 7:16 am

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:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

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

Postby xmanuel » Tue Apr 06, 2021 7:31 am

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
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

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

Postby jvtecheto » Tue Apr 06, 2021 4:41 pm

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.
Fwh 19.06 32 bits + Harbour 3.2dev(r2104281802) + Borland 7.4 + FivEdit
User avatar
jvtecheto
 
Posts: 576
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Postby hmpaquito » Tue Apr 06, 2021 5:32 pm

Intenta asi:
Code: Select all  Expand view
hb_ForNext( 1, Len( aNums ), < | i | nSum += aNums[ i ]; return nSum > ) // Observa el ;
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Postby jvtecheto » Tue Apr 06, 2021 7:11 pm

Hola hmpaquito.

Tampoco funciona asi.

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

Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2104281802) + Borland 7.4 + FivEdit
User avatar
jvtecheto
 
Posts: 576
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Postby AIDA » Tue Apr 06, 2021 10:11 pm

AUN NO EMPIEZA EL CURSO O ESTOY DESPISTADA :roll:

Saluditos :wink:
Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
User avatar
AIDA
 
Posts: 877
Joined: Fri Jan 12, 2007 8:35 pm

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

Postby hmpaquito » Tue Apr 06, 2021 10:52 pm

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Postby cnavarro » Tue Apr 06, 2021 11:58 pm

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
 
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: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Postby Antonio Linares » Wed Apr 07, 2021 8:10 am

Para xHarbour este define es necesario:

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

Ese código está incluido en FiveWin.ch
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby hmpaquito » Wed Apr 07, 2021 8:41 am

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: {|| }
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Postby Antonio Linares » Wed Apr 07, 2021 10:22 am

gracias Paco
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

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

Postby hmpaquito » Wed Apr 07, 2021 10:25 am

A mandar !
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests