"Fossies" - the Fresh Open Source Software Archive

Member "gambas-3.16.3/app/src/gambas3/tips/tips.es.txt" (7 Sep 2021, 12575 Bytes) of package /linux/misc/gambas-3.16.3.tar.bz2:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 [WELCOME]
    2 
    3 <p>¡Bienvenido a <b>Gambas</b>!</p>
    4 
    5 <p><b>Gambas</b> es un ambiente integrado de desarrollo basado en un intérprete <i>Basic</i> avanzado.</p>
    6 
    7 <p><b>Gambas</b> pretende permitirle crear poderosos programas rápida y fácilmente. Pero la claridad de éstos programas es su <i>propia</i> responsabilidad...</p>
    8 
    9 <p>¡Disfrútelo!</p>
   10 
   11 <p align=right>Beno&icirc;t Minisini<br><u>g4mba5@gmail.com</u></p>
   12 
   13 [STARTUP]
   14 
   15 <p>Cada proyecto debe tener una <i>clase de inicio</i>. Ésta clase de inicio debe definir un método estático y público llamado <i>Main</i> sin argumentos, que actuará como el método de inicio de su programa.</p>
   16 
   17 <p>Usted puede definir la clase de inicio haciendo click sobre ella con el botón derecho del ratón en el árbol del proyecto, y seleccionado <i>Clase de inicio</i> en el menú contextual.</p>
   18 
   19 <p>No es necesario definir un método <i>Main</i> en un formulario de inicio, porque éste ya tiene uno predefinido.</p>
   20 
   21 <p>Éste método predefinido de inicio instancia el formulario y lo muestra, como en <i>Visual Basic&trade;</i>.</p>
   22 
   23 [OPEN]
   24 
   25 <p>La instrucción <b>OPEN</b> de <b>Gambas</b> no trabaja como la de <i>Visual Basic&trade;</i>. Ésta no retorna el archivo como un entero, sino como un objeto <i>File</i>.</p>
   26 
   27 <p>Así que, en lugar de escribir:</p>
   28 
   29 <pre>DIM handle AS Integer
   30 ...
   31 OPEN "myfile" FOR READ AS #handle</pre>
   32 
   33 <p>debe escribir:</p>
   34 
   35 <pre>DIM handle AS File
   36 ...
   37 handle = OPEN "myfile" FOR READ</pre>
   38 
   39 [CATDIR]
   40 
   41 <p>¿Sabía que puede concatenar nombres de directorios y nombres de archivos con el operador <b><tt>&/</tt></b>? Éste operador maneja las barras inclinadas de tal forma que la ruta resultante es perfecta.</p>
   42 
   43 <p>Por ejemplo:</p>
   44 
   45 <pre>PRINT "/home/gambas" &/ ".bashrc"
   46 /home/gambas/.bashrc
   47 
   48 PRINT "/home/gambas/" &/ "/tmp" &/ "foo.bar"
   49 /home/gambas/tmp/foo.bar
   50 </pre>
   51 
   52 <p>¿No es maravilloso?</p>
   53 
   54 [EXEC]
   55 
   56 <p>Usted puede crear un archivo ejecutable del proyecto entero. Seleccione <i>Crear ejecutable</i> en el menú <i>Proyecto</i>.</p>
   57 
   58 <p>Cuando <b>Gambas</b> hace un archivo ejecutable, por defecto pone el resultado en el directorio del proyecto. El nombre del ejecutable tiene el mismo nombre de su proyecto.</p>
   59 
   60 [PATH]
   61 
   62 <p>Las rutas relativas tienen un significado especial en <b>Gambas</b>. Ellas siempre se refieren a archivos dentro de sus proyectos.</p>
   63 
   64 <p>No existe el concepto de <i>directorio actual</i>, ni palabra reservada como <tt>CHDIR</tt> para cambiarlo.</p>
   65 
   66 <p><b>Tenga cuidado:</b> debe utilizar rutas relativas sólo para acceder archivos del proyecto, porque las rutas absolutas no trabajarán más cuando usted cree un ejecutable.</p>
   67 
   68 [GLOBAL]
   69 
   70 <p>¡No hay <u>variables globales</u> en <b>Gambas</b>!</p>
   71 
   72 <p>Como apoyo, póngalas en su módulo principal y declárelas como <tt>PUBLIC</tt>.</p>
   73 
   74 <p>Si no tiene un módulo principal en su proyecto, pero sí un formulario principal, entonces declárelas como <tt>STATIC PUBLIC</tt>.</p>
   75 
   76 <p>Para acceder a esas variables, debe utilizar el nombre del módulo o formulario principal: <tt>MyMainModule.MyGlobalVariable</tt> o <tt>MyMainForm.MyGlobalVariable</tt>.</p>
   77 
   78 
   79 [EMPTY]
   80 
   81 <p>Para saber si una cadena está vacía, no es necesario usar la función <b>Len()</b>. Usted puede probarla directamente, ya que una cadena vacía es <b>FALSE</b> y una no vacía es <b>TRUE</b>.</p>
   82 
   83 <p>Por ejemplo, en lugar de hacer:</p>
   84 
   85 <pre>IF Len(MyString) > 0 THEN ...
   86 IF Len(MyString) = 0 THEN ...</pre>
   87 
   88 <p>Usted podría hacer:</p>
   89 
   90 <pre>IF MyString THEN ...
   91 IF NOT MyString THEN ...</pre>
   92 
   93 [TRANSLATE]
   94 
   95 <p>Las aplicaciones <b>Gambas</b> son completamente traducibles, usted decide cual cadena debe ser traducida, y cual no.</p>
   96 
   97 <p>Para marcar una cadena como traducible, sólo enciérrela entre paréntesis:</p>
   98 
   99 <pre>PRINT ("Tradúceme")
  100 PRINT "¡Pero no me traduzcas a mi!"</pre>
  101 
  102 [EVENT]
  103 
  104 <p>Cada control, y cada objeto que puede lanzar eventos, tiene un <i>observador de eventos</i> y un <i>nombre de grupo</i> de evento.</p>
  105 
  106 <p>El observador de eventos atrapa cada evento lanzado por el objeto, y el grupo de nombre es el prefijo del procedimiento llamado para manejar el evento.</p>
  107 
  108 <p>Por defecto, este observador de eventos es el objeto donde usted creó el control, y el nombre de grupo es el nombre del control.</p>
  109 
  110 <p>De esta forma, un formulario recibe todos los eventos lanzados por los controles que usted creó dentro de él.</p>
  111 
  112 <pre>' Gambas form
  113 DIM hButton AS Button
  114 
  115 PUBLIC SUB _new()
  116 &nbsp;&nbsp;hButton = NEW Button(ME) AS "MyButton"
  117 END
  118 
  119 PUBLIC SUB MyButton_Click()
  120 &nbsp;&nbsp;PRINT "¡Usted ha presionado MyButton!"
  121 END
  122 </pre>
  123 
  124 [FORM]
  125 
  126 <p>En <b>Gambas</b>, un formulario es su propio observador de eventos, así que usted puede manejar sus eventos directamente (como <i>Resize</i>, <i>Activate</i>, ...) dentro su propio código de clase.</p>
  127 
  128 <p>De esta forma, los novatos que vengan de <i>Visual Basic&trade;</i> no estarán desorientados :-).</p>
  129 
  130 [EMBED]
  131 
  132 <p>¡Usted puede incrustar cualquier formulario dentro de otros con <b>Gambas</b>!</p>
  133 
  134 <p>Para hacer una cosa tan poderosa, sólo instancie el formulario pasando un contenedor padre como último argumento del constructor.</p>
  135 
  136 <p>Por ejemplo:</p>
  137 <p><tt>DIM hForm AS MyDialog<br>
  138 DIM hSuperControl AS MyForm<br><br>
  139 ' Crear un dialigo<br>
  140 hForm = NEW MyDialog<br>
  141 ' Insertar un formulario dentro de éste dialogo<br>
  142 ' Note que éste formualario toma dos parámetros antes del contenedor<br>
  143 hSuperControl = NEW MyForm(Param1, Param2, MyDialog)<br>
  144 ' Mover y redimensionar el formulario<br>
  145 hSuperControl.Move(8, 8, 128, 64)<br>
  146 </tt></p>
  147 
  148 <p><b>Tenga cuidado:</b> un formulario incrustado dentro de otro es aún un formulario, y entonces es su propio observador de eventos.</p>
  149 
  150 [GROUP]
  151 
  152 <p>Cada control tiene una propiedad <i>(Group)</i>. Cuando ésta propiedad es configurada, el prefirjo del nombre del manejador de eventos es el nombre del grupo y no el nombre del control.</p>
  153 
  154 <p>Supongamos que tiene un <i>Butón</i> llamado <b>btnAction</b> con el siguiente manejador de eventos <i>Click</i>:</p>
  155 
  156 <pre>PUBLIC SUB btnAction_Click()</pre>
  157 
  158 <p>Si usted configura la propiedad <i>(Group)</i> de <b>btnAction</b> a <i>MyGroup</i>, entonces el manejador de eventos que recibirá los eventos del botón será el siguiente:</p>
  159 
  160 <pre>PUBLIC SUB MyGroup_Click()</pre>
  161 
  162 <p>Esta propiedad permite manejar eventos de diferentes controles en una función. ¡Y los controles del mismo nombre de grupo no tienen que ser del mismo tipo!</p>
  163 
  164 <p><b>Nota:</b> Los viejos veteranos de <i>Visual Basic&trade;</i> podrían reconocer el concepto de <i>arreglo de controles</i>, pero en una implementación más poderosa. :-)</p>
  165 
  166 [TAG]
  167 
  168 <p>Cada control tiene una propiedad <i>Tag</i>. Ésta propiedad es para el programador, y puede contener cualquier dato de tipo <b>VARIANT</b> que usted pueda encontrar relevante.</p>
  169 
  170 <p>Ésto es muy útil, cuando quiere distinguir controles del mismo grupo en un manejador de eventos común.</p>
  171 
  172 [LAST]
  173 
  174 <p>La palabra clave <b>LAST</b> retorna el último control que ha recibido un evento. Ésto es muy últil cuando usted quiere escribir un manejador de eventos que es independiente de cada nombre de control.</p>
  175 
  176 <p>Por ejemplo, supongamos que usted quiere escribir un programa de una calculadora. Usted ha definido diez botones, uno para cada dígito, cada uno en el mismo <i>group</i> "Digit". El <i>Tag</i> de cada control es configurado para el dígito dibujado en el botón. Su manejador de eventos podría lucir así:</p>
  177 
  178 <p><tt>PUBLIC SUB Digit_Click()<br><br>
  179 &nbsp;&nbsp;Display = Display & LAST.Tag<br>
  180 &nbsp;&nbsp;RefreshDisplay<br><br>
  181 END</tt></p>
  182 
  183 
  184 [LEFT]
  185 
  186 <p>Las bien conocidas rutinas <i>BASIC</i> <b>Left$</b>, <b>Right$</b> y <b>Mid$</b> tienen conductas útiles en <b>Gambas</b>.</p>
  187 
  188 <p>El segundo parámetro de <b>Left$</b> y <b>Right$</b> es opcional, y es uno por defecto.</p>
  189 
  190 <p><tt>Left$("Gambas")</tt> retorna <tt>"G"</tt><br> <tt>Right$("Gambas")</tt> retorna <tt>"s"</tt></p>
  191 
  192 <p>El segundo parámetro puede ser negativo, y entonces da el número de caracteres a no extraer.</p>
  193 
  194 <p><tt>Left$("Gambas", -2)</tt> retorna <tt>"Gamb"</tt><br> <tt>Right$("Gambas", -2)</tt> retorna <tt>"mbas"</tt></p>
  195 
  196 <p>Asimismo, el tercer argumento de <b>Mid$</b> puede ser negativo, y entonces da el número de caracteres desde el final de la cadena a no extraer.</p>
  197 
  198 <p><tt>Mid$("Gambas", 2, -2)</tt> retorna <tt>"amb"</tt>
  199 
  200 [OBSERVER]
  201 
  202 <p>El clase <b>Observer</b> le permite interceptar todos los eventos lanzados por un objeto antes que de que sean enviados.</p>
  203 
  204 <pre>MyTextBox = NEW TextBox(ME) AS "MyTextBox"
  205 MyObserver = NEW Observer(MyTextBox) AS "MyObserver"
  206 ...
  207 PUBLIC SUB MyObserver_KeyPress()
  208   DEBUG "Tengo ésto primero"
  209 END
  210 
  211 PUBLIC SUB MyTextBox_KeyPress()
  212   DEBUG "Tengo ésto después"
  213 END</pre>
  214 
  215 <p>El observador puede cancelar el evento para prevenir que el objeto eventualmente lo lance.</p>
  216 
  217 [STRING]
  218 
  219 <p><b>Gambas</b> usa el juego de caracteres <b>UTF-8</b> para representar cadenas en la memoria.</p>
  220 
  221 <p>Pero todas las funciones de cadena estándar de <b>Gambas</b> trabajan con <b>ASCII</b>: <tt>Left</tt>, <tt>Mid</tt>, <tt>Right</tt>, <tt>UCase</tt>...</p>
  222 
  223 <p>Si quiere manipular una cadena UTF-8, tiene que usar los métodos de la clase estática <b>String</b>, la cual tiene el mismo nombre de sus homólogos estándar.</p>
  224 
  225 <pre>PRINT Len("bébé");; Left$("bébé", 3)
  226 6 bé
  227 PRINT String.Len("bébé");; String.Left("bébé", 3)
  228 4 béb</pre>
  229 
  230 [ASSIGNMENT]
  231 
  232 <p><b>Gambas</b> implementa los atajos de asignación a los que los programadores de C/C++ están acostumbrados.</p>
  233 
  234 <p><tt>MyVariable += 2</tt> es equivalente a <tt>MyVariable = MyVariable + 2</tt></p>
  235 
  236 <p><tt>MyVariable &= "Great"</tt> es equivalente a <tt>MyVariable = MyVariable & "Great"</tt></p>
  237 
  238 <p>Así consecutivamente...</p>
  239 
  240 [DEBUG]
  241 
  242 <p>Usted puede usar la instrucción <b>DEBUG</b> para imprimir mensajes de depurado en la consola (llamada la salida de errores estándar). Ésta se comporta exactamente como la instrucción <tt>PRINT</tt>.</p>
  243 
  244 <p>Los mensajes tienen el prefijo del nombre de la clase, nombre del método y número de línea de la instrucción <tt>DEBUG</tt>.</p>
  245 
  246 <p>Los mensajes de depurado son automáticamente removidos cuando se crea un ejecutable sin la información del depurado.</p>
  247 
  248 [TRY]
  249 
  250 <p>El manejo de Errores en <b>Gambas</b> es echo con las siguientes instrucciones: <b><tt>TRY</tt></b>, <b><tt>ERROR</tt></b>, <tt>CATCH</tt>, y <tt>FINALLY</tt.</p>
  251 
  252 <p><tt>TRY</tt> trata de ejecutar una sentencia sin lanzar un error. La instrucción <tt>ERROR</tt> es usada justo después para saber si la instrucción fue ejecutada correctamente.</p>
  253 
  254 <pre>TRY MyFile = OPEN "/etc/password" FOR WRITE
  255 IF ERROR THEN PRINT "¡No puedo hacer lo que quiero!"</pre>
  256 
  257 [CATCH]
  258 
  259 <p>El manejo de Errores en <b>Gambas</b> es echo con las siguientes instrucciones: <tt>TRY</tt>, <tt>ERROR</tt>, <b><tt>CATCH</tt></b>, y <tt>FINALLY</tt>.</p>
  260 
  261 <p><tt>CATCH</tt> indica el inicio de la parte de manejo de errores de una función o procedimiento. Es puesto al final del código de la función.</p>
  262 
  263 <p>La parte catch es ejecutada cuando un error es lanzado entre el inicio de la ejecución de la función y su final.</p>
  264 
  265 <p>Si un error es lanzado durante la ejecución de la parte catch, éste es normalmente propagado.</p>
  266 
  267 <pre>SUB ProcessFile(FileName AS STRING)
  268   ...
  269   OPEN FileName FOR READ AS #hFile
  270   ...
  271   CLOSE #hFile
  272 CATCH ' Ejecutado sólo si hay un error
  273   PRINT "No se puede procesar el archivo "; FileName
  274 END</pre>
  275 
  276 [FINALLY]
  277 
  278 <p>El manejo de Errores en <b>Gambas</b> es echo con las siguientes instrucciones: <tt>TRY</tt>, <tt>ERROR</tt>, <tt>CATCH</tt>, y <b><tt>FINALLY</tt></b>.</p>
  279 
  280 <p><tt>FINALLY</tt> introduce el código ejecutado al final de la función, aunque un error haya sido lanzado durante su ejecución.</p>
  281 
  282 <p>La parte finally no es mandatoria. Si hay una parte catch en la función, la parte finally debe de precederle.</p>
  283 
  284 <p>Si un error es lanzado durante la ejecución de la parte finally, éste es normalmente propagado.</p>
  285 
  286 <pre>SUB ProcessFile(FileName AS STRING)
  287   ...
  288   OPEN FileName FOR READ AS #hFile
  289   ...
  290 FINALLY ' Siempre ejecutada, aunque un error sea lanzado
  291   CLOSE #hFile
  292 CATCH ' Ejecutado sólo si hay un error
  293   PRINT "No se puede imprimir el archivo "; FileName
  294 END</pre>
  295 
  296 [END]
  297 
  298 <p>Usted ha leído todos los consejos de los días. ¡Espero que ahora se haya convertido en en experto en <b>Gambas</b>! :-)</p>
  299 
  300 <p>Si quiere contribuir, envíe nuevos consejos a la siguiente dirección:</p>
  301 
  302 <p><u>g4mba5@gmail.com</u></p>