Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Extendiendo la clase String - Compare
#1
Lightbulb 

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
    ¡Gracias!
#2

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

"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)

"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
    ¡Gracias!
#3

(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
    ¡Gracias!
#4

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
    ¡Gracias!
#5

(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
    ¡Gracias!
#6

De nada. He editado mi respuesta anterior, échale un ojo.

Un saludo.
    ¡Gracias!
#7

(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.
    ¡Gracias!
#8

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...
    ¡Gracias!
#9

(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.
    ¡Gracias!
#10

(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.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • AlfredoSC
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)