Constantes

Started by scuws, April 26, 2010, 07:54:47 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

scuws

Tengo una duda, cuando estas declarando constantes puedes hacer por ejemplo esto:

CONST

BYTE HOLA = 3;

END


¿Ponerle el byte o cualquier otro dentro de const?

Otra, en todos los proyectos el .prg que se ejecuta el primero tiene que tener lo de PROGRAM NOMBRE;

FreeYourMind

Me imagino que si, si lo puedes hacer como global...

Global
byte A = 0;

Pero el END sobra.

scuws

Pero me refiero si dentro de un CONST puedo poner lo de BYTE NOMBRE = 2; ?

DCelso

#3
Sipo, un const es una variable que no cambia su valor.
Si lo que quieres es hacer constantes tipo C puedes usarlas igual:

#define NOMBRE_CONSTANTE "valor"

ahí ya no puedes poner el tipo de dato. A este tipo de constantes se les llama macros y son sustituidas en tiempo de compilación por su valor, a diferencia de las "const" que son sustituidas en tiempo de ejecución.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

scuws

Gracias por lo de las constantes  :)


Otra cosa
      ¿ El primer .prg que se ejecuta tiene que llevar obligatoriamente lo de PROGRAM NOMBRE; ?

FreeYourMind

Hombre claro que si, lo de separar el programa en trozos (.prg's o libs o el nombre que le llames) salío despúes.
Program sólo tienes uno, aunque lo subdividas en millones de ficheros externos .prg

osk

El END no sobra.
En vez de PROGRAM nombreprograma; se puede poner PROCESS Main() en el cuerpo del código principal.

scuws

Gracias solo queria asegurarme

DCelso

La línea program no hace falta para nada, independientemente de si pones "proces Main()" o no, pero si la pones debe ser la primera sino no compilará tu ".prg"
a ver si me explico mejor con ejemplos:

program miejemplo;
import "mod_say";
begin
  say("Hola Mundo");
end



import "mod_say";
begin
  say("Hola Mundo");
end



import "mod_say"
Process main()
begin
  say("Hola Mundo");
end


program miejemplo;
import "mod_say"
Process main()
begin
  say("Hola Mundo");
end

Todas funcionan igual pero si intentaramos esto:

import "mod_say";
program miejemplo;
begin
  say("Hola Mundo");
end

Daría un error.
Por cierto el punto y coma del final de las líneas import no es necesario, pero SplinterGU siempre lo pone y creo que lo recomienda.
Al igual que el end al final de cada bloque de datos, no es necesario pero lo mismo, SplinterGU siempre lo pone y recomienda. No se exactamente el motivo, si quiere que nos lo diga.
Ejemplos de lo que digo:

import "mod_say";
const
 string hola_mundo = "Hola Mundo";
end
begin
  say(hola_mundo);
end



import "mod_say";
const
 string hola_mundo = "Hola Mundo";
end
global
 string adios ;
end
begin
  adios_mundo= "Adios";
  say(hola_mundo);
  say(adios);
end



import "mod_say";
const
 string hola_mundo = "Hola Mundo";
end
global
 string adios ;
begin
  adios_mundo= "Adios";
  say(hola_mundo);
  say(adios);
end



import "mod_say"
const
 string hola_mundo = "Hola Mundo";
global
 string adios ;
begin
  adios_mundo= "Adios";
  say(hola_mundo);
  say(adios);
end

Todos compilan, en este último quité tambien el punto y coma del import para ver que también compila.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Splinter, te veo activo ahora por el foro, ¿podrías exclarecer algo más en este tema? por ejemplo el uso de ";" después de un import o el uso de "end" en el final de un bloque de datos, o el porqué de la variedad de estructuras.
Gracias.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

no lo recuerdo, tendria que revisar el codigo... y ahora estoy por salir...

creo que las constantes no llevan tipo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ah, el ; es opcional en el import... por compatibilidad es opcional...

lo correcto es...

si empieza con # no lleva ;

si no empieza con # lleva ;

los END serian lo recomendable... en algunos casos es obligatorio, en otros no.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Las CONST no llevan tipo, lo verifico, son simples sustituciones.

Hoy mismo estaba pensando en que sería interesante disponer de un ámbito a caballo entre CONST y GLOBAL, por ejemplo, necesitaba tener un vector con valores constantes para los precios de unas unidades en un juego de estrategia, y he tenido que usar GLOBAL, lógicamente.

Sería interesante poder especificar que esa GLOBAL está de alguna manera protegida y no puede verse modificada. Entiendo que basta con tener cuidado, pero el código quedaría mucho más claro si se prefija de alguna manera, por ejemplo:

GLOBAL
   constant int precios [ 4 ] = 1 , 10 , 25 , 50 , 100;
END

Y yo siempre recomiendo poner END en todo bloque GLOBAL, CONST, LOCAL, queda más elegante, sobre todo si declaras varios bloque en diferentes puntos del programa, son zonas del código importantes y no está de más separarlas de las instrucciones :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

wind, sí que llevan tipo, lo que pasa es que bennu por defecto usa int. Prueba a crear una constante de una cadena e imprimirla sin poner string.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

#14
 :o. Anda, pues va, esto juraría que no debiera de ser así, tendré que revisar el tema de las "const" más detenidamente.

Edit: además viene bien explícito en la wiki que no está permitido poner el tipo de la variable.
http://wiki.bennugd.org/index.php?title=Const#example

Estoy taco rallao, entonces no veo diferencia en usar #define o const, siempre supuse y usé el bloque const como las variables que en c tienen esa restrinción.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/