*** Curso de C para programadores Harbour.

Post Reply
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

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

Post by cnavarro »

xmanuel wrote:

Code: Select all | Expand



   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
VictorCasajuana
Posts: 269
Joined: Wed Mar 28, 2018 4:38 pm
Location: Vinaròs
Has thanked: 1 time
Contact:

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

Post 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


   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


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

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

Post by hmpaquito »

Coincido con Victor: Prefiero claridad a linealidad



Code: Select all | Expand

IF A > B
   ? "ES A"
ELSE
   ? "ES B"
ENDIF


Es más claro que

Code: Select all | Expand

? 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

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 ?
xmanuel
Posts: 768
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Been thanked: 5 times
Contact:

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

Post 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:
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
Posts: 768
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Been thanked: 5 times
Contact:

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

Post 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
______________________________________________________________________________
Sevilla - Andalucía
User avatar
jvtecheto
Posts: 603
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Post by jvtecheto »

cnavarro wrote:
xmanuel wrote:

Code: Select all | Expand



   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


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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
hmpaquito
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Post by hmpaquito »

Intenta asi:

Code: Select all | Expand

hb_ForNext( 1, Len( aNums ), < | i | nSum += aNums[ i ]; return nSum > ) // Observa el ;
User avatar
jvtecheto
Posts: 603
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Post by jvtecheto »

Hola hmpaquito.

Tampoco funciona asi.

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

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
AIDA
Posts: 879
Joined: Fri Jan 12, 2007 8:35 pm

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

Post by AIDA »

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

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

Post 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

{|| lo_que_sea }
para extended codeblock. Es xHarbour el que utiliza una sintaxis especial

Code: Select all | Expand

<|| lo_que_sea >

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

Salu2
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

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

Post 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


   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
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

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

Post by Antonio Linares »

Para xHarbour este define es necesario:

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

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

Antonio Linares
www.fivetechsoft.com
hmpaquito
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Post 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: {|| }
User avatar
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

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

Post by Antonio Linares »

gracias Paco
regards, saludos

Antonio Linares
www.fivetechsoft.com
hmpaquito
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

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

Post by hmpaquito »

A mandar !
Post Reply