OskarG wrote:Hola erkos hay alguna manera de saber en tu engine cuando diablos se utiliza la palabra this... Cuando esté más avanzado tu proyecto comenzaré a trastear con el ...si te sirve de inspiración mira amulet lua ...es otro lenguaje pero muy sencillo de asimilar.
THIS en los lenguajes OOP se usa como identificador de la instancia de la clase, cuando creas una instancia te devuelve un ID que es un puntero a la zona de memoria donde se aloca dicha instancia, THIS tiene este indiricio (ID) asi que si usas THIS.FIELD puedes acceder a los miembros de la clase (privados, publicos, etc...)
El utilizo mayor de THIS es para identificar y usar las variables locales en los metodos que declaren variables con el mismo nombre o para devolver el ID con algun metodo, hacemos un ejemplo simple:
- Defines una clase Player.
- Declaras unas variables locales de la clase: X y Y, que identifican la posicion en pantalla del player.
- Defines un metodo "move" que permite mover el player, que a su vez tiene dos parametros: INT x, INT y (prototipo = int move(int x, int y))
Por ende lo que haces normalmente en OOP es (C++, C#, Java y similares):
Player player; // variable que memoriza el ID de la instancia:
player = new player(); // se crea la instancia y se memoriza su ID en la variable
player.move(10, 10); // llamamos el metodo "move" para mover el player
....
class Player {
private:
int x, y; // datos locales de la clase
public:
int move(int x, int y) {
this->x = x;
this->y = y;
}
Player& getID() {
return *this;
}
}
Como puedes notar en la definicion del metodo de la clase, los parametros tienen los mismos nombres de las locales asi que para poderlos usar es necesario "referenciar" las locales con algun ID, el segundo metodo "getID", devuelve el ID de la instancia de la clase, todo esto lo hace la palabra THIS.
En DIV/Gemix THIS es equivalente a ID para los procesos y en Gemix para los metodos, tambien Gemix include THIS como palabra clave nueva, la unica diferencia que hay que considerar en el lenguaje DIV respecto a los lenguajes OOP tradicionales es que si creas una instancia de un proceso y esto declara parametros que ya son variables locales, la asignacion es directa y por ende "this.x = x" o "id.x = x" en su cuerpo es redundante.
Espero que la explicacion te sea util.