Comunidad Gambas-es

Versión completa: Extendiendo la clase String - Compare
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola a todos.
En este tema voy a ir poniendo funciones que estoy agregando a la clase String para hacer que esta se parezca mas a su equivalente en otros lenguajes como Javascript, Go, etc.
Si alguno desea comentar corregir o agregar algo esta invitado a hacerlo, eso si, por favor comente si la función existe en otro lenguaje, para poder referenciarlo y por favor coloque la descripción de esta en inglés.
Mi intensión es proponer luego a los desarrolladores de Gambas la colección de nuevas funciones.
Ejemplo de la versión gambas de la función Compare del paquete strings del lenguaje GO
GAMBAS
  1. '' <b>GO Package strings</b><br>
  2. '' <u>Compare</u> returns an integer comparing two strings lexicographically. The result will be 0 If a == b, -1 If a < b, And +1 If a > b.
  3.  
  4.   If a == b Then
  5.     Return 0
  6.   Else
  7.     If a < b Then
  8.       Return -1
  9.     Else
  10.       Return 1
  11.     Endif



Saludos
Perdóname, tincho, ¿puedes aclarar mejor tu intención que los Métodos Confused ya poseídos por la Clase String ?

   https://gambaswiki.org/wiki/cat/string
(14-04-2021, 17:44)vuott escribió: [ -> ]Perdóname, tincho, ¿puedes aclarar mejor tu intención que los Métodos Confused ya poseídos por la Clase String ?

Las funciones que existen en la clase nativa String no las modificare en absoluto solo agregare funciones que no existan en esta ni en gb.Util.
Todo lo que agregue estará en un archivo llamado String.class en mi proyecto local gambas. Tal vez en el futuro toda esta recopilación de funciones podría ir a parar a gb.util, pero eso lo conversare mas adelante con Benoîte.
Saludos
Hola.

En Gambas ya existe una función que hace eso, y es un poco mas completa.

https://gambaswiki.org/wiki/lang/comp

Un saludo.

P.D.: Hace ya algún tiempo, estando aburrido, amplié la clase String pero me basé en Python, sin mirar el código fuente de Python, es decir, a ojo de buen cubero como entretenimiento. Te subo el archivo, si ves que alguna puede servir, adelante. Aviso que no están en inglés, y la explicación de lo que hace cada función es algo vaga. Cosas del directo, jajajaja.


P.D.2: No me deja subir el archivo, o no se hacerlo. Pongo un enlace donde está almacenada el archivo en mi nube. https://cloud.disroot.org/s/3WFP3qtiJpsiFz8
(17-04-2021, 17:44)guizans escribió: [ -> ]En Gambas ya existe una función que hace eso, y es un poco mas completa.
Tenes razón. tiene la opción de decir que método de comparación usar.
Lo voy a estudiar, gracias.
Saludos
De nada. He editado mi respuesta anterior, échale un ojo.

Un saludo.
(17-04-2021, 18:27)guizans escribió: [ -> ]He editado mi respuesta anterior, échale un ojo.

ok, me lo descargue, lo voy a estudiar, gracias por el aporte.

Recién hice una prueba de rendimiento y si lo hice bien String.Comp es un 50% mas rápido que la que hice yo String.Compare (que usa ==)
Saludos.
Hola tincho:

Voy a "colgarme" de este hilo porque me pareció que aquí está la respuesta a una programación que estoy haciendo en Gambas.

Resulta que quiero hacer el software de una antigua calculadora CASIO FX800 y encuentro que el operario tiene que introducir por ejemplo:

3.1416*SIN30 + 2

Y finalmente oprimir el botón EXECUTE para dar el resultado.

Estuve haciendo ensayos para ir recorriendo ese String y asignar una variable a 3.1416, luego otra variable al símbolo *, luego otra variable a SIN, otra mas para el signo + y finalmente otra para el 2.

Así podría calcular por prioridades el SIN30, luego multiplicar por 3.1416 y finalmente sumar 2 y dar el resultado....

Así es como funciona esa calculadora y no me puedo dar el lujo de cambiar ese método. Se te ocurren algunas "extensiones" al método String que puedan hacer eso???

Saludos...
(21-04-2021, 18:54)AlfredoSC escribió: [ -> ]Se te ocurren algunas "extensiones" al método String que puedan hacer eso???

Hola Alfredo, si la verdad que no seria muy complicado hacer una extensión que convierta una cadena en una fórmula.
Si quieres te ayudo. pero tendrías que definir las prioridades de símbolos, por ejemplo lo que esta entre paréntesis va antes que lo demás, las sumas van después de las multiplicaciones etc. etc.
Pasame algunos ejemplos mas y veo que sale t le vamos dando forma.
Saludos.
(21-04-2021, 18:54)AlfredoSC escribió: [ -> ]3.1416*SIN30 + 2

Alfredo, luego de hacer una mega formula para preparar una sentencia traducida desde "3.1416*SIN30 + 2" a "3.1416 * Sin( Rad(30) ) + 2" que es lo que lee la funcion Eval caigo en la cuenta que no tiene sentido, puesto que al tratarse de un programa emulador de la calculadora la sentencia se va escribiendo a medida que se pulsan los botones.
Bien me pregunto ¿Por que no crear la sentencia en el formato que es compatible con Eval ? eso resolveria el problema de forma muy sencilla.
Si al teclear podemos escribir esto > "3.1416*SIN30 + 2"
También podíamos escribir esto otro > "3.1416 * Sin( Rad(30) ) + 2"
De esta manera la calculadora se resume a prepara la sentencia para Eval y listo.

Saludos.
Páginas: 1 2