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
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.
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!
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 ?
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..."
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
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.
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
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