elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ¿Estoy usando JScript o lo interpreto con C#?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Estoy usando JScript o lo interpreto con C#?  (Leído 1,724 veces)
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
¿Estoy usando JScript o lo interpreto con C#?
« en: 10 Octubre 2015, 23:44 pm »

Buenas,

Estoy intentando realizar como una calculadora de windows... osea que todo lo hace en un textBox... he estado investigando y tal... y encontré esto:

Código
  1. private string EvalExpression(string expression)
  2.        {
  3.            VsaEngine engine = VsaEngine.CreateEngine();
  4.            try
  5.            {
  6.                object o = Eval.JScriptEvaluate(expression, engine);
  7.                return System.Convert.ToDouble(o).ToString();
  8.            }
  9.            catch
  10.            {
  11.                return "No se puede evaluar la expresión";
  12.            }
  13.            engine.Close();
  14.        }

Código
  1. using Microsoft.JScript;
  2. using Microsoft.JScript.Vsa;

Todo funciona según lo previsto.
¿Pero estoy trabajando con JScript? ¿O mantengo la forma de C#?

Es que estoy un poco confuso... si es JScript.. ¿se puede realizar en C#?

Cualquier información adicional lo agradecería.

Saludos.


En línea

Esta página web no está disponible - Google Chrome
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: ¿Estoy usando JScript o lo interpreto con C#?
« Respuesta #1 en: 11 Octubre 2015, 01:55 am »

encontré esto:

¿Pero estoy trabajando con JScript? ¿O mantengo la forma de C#?

Todo ese código está escrito en C#, pero el método Eval.JScriptEvaluate llama al intérprete JScript de Microsoft para evaluar código de JScript/javascript (es exactamente el mismo lenguaje), ya sea evaluar una expresión aritmética o no.

Esas classes de Microsoft.JScript quedaron obsoletas desde hace más de una década, deberías evitar su utilización, pues empezariamos muy mal si desarrollasemos una aplicación como una calculadora (la cual implica una mínima eficiencia posible) usando miembros deprecados, por muy buenos resultados que te de al evaluar... por algún buen motivo habrá quedado deprecada esa metodología.



si es JScript.. ¿se puede realizar en C#?

Si, puedes evaluar expresiones aritméticas en puro código administrado de C#/VB.Net.

Una manera sería compilando la expressión para devolver la respuesta, para ello puedes utilizar los proveedores de código de VB.Net o C (lee acerca de las classes VBCodeProvider o CSharpCodeProvider y CodeDomProvider), pero hacerlo implicaría fugas de memoria inevitables, ya que por cada evaluación realizada se generaría un ensamblado .Net que jamás serían liberados hasta finalizar la aplicación, así que no te lo recomiendo.

La otra forma sería demasiado tediosa o compleja, hablamos de desarrollar tu propio evaluador de expresiones, idear los algoritmos para tokenizar la expresión, hacer los cálculos, llevar los controles de errores, etc. No vale la pena trabajar en algo así cuando ya existen librerías open-source para .Net que han estado optimizando esa tarea durante años.

Te recomiendo la librería NCalc:
NCalc - Mathematical Expressions Evaluator for .NET - CodePlex

La página está plagado de ejemplos en C#, así que mostraré uno en VB.Net:

Código
  1. Dim exp As String = "(1 + (2 - 2)) * (100 / 2.5)" ' = 40
  2. Dim calc As New NCalc.Expression(exp)
  3. Dim result As Decimal
  4.  
  5. If Not calc.HasErrors() Then
  6.    result = CDec(calc.Evaluate())
  7. Else
  8.    MessageBox.Show(calc.Error)
  9. End If
  10.  

De todas formas, si por algún motivo quieres reinventar la rueda o hacer tu propia implementación personalizada, aquí te muestro dos buenos ejemplos...

Este código fuente parece estar muy bien, está orientado a la evaluación de expresiones aritméticas, y las expresiones soportan el uso de las funciones de la class System.Math (abc, exp, floor, round, pow, etc...) :
A C# Expression Evaluator - Black Belt Coder

Este código fuente está orientado a la evaluación de expresiones de varios tipos, incluyendo expresiones aritméticas claro está:
The expression evaluator revisited (Eval function in 100% managed .NET) - CodeProject
( debe ser un poco lento al evaluar objetos, por el uso de Reflection )

Saludos


« Última modificación: 11 Octubre 2015, 02:04 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Este metodo que estoy usando esta bien?
.NET (C#, VB.NET, ASP)
enterariel 2 4,918 Último mensaje 6 Mayo 2009, 00:48 am
por MANULOMM
Como interpreto la salida del aircrack?
Hacking Wireless
Just64 3 2,284 Último mensaje 3 Septiembre 2010, 05:45 am
por frakc/kcdtv
Mi programa no libera memoria, estoy usando heapdestroy y heapcreate
Programación C/C++
milya777 7 5,646 Último mensaje 29 Marzo 2011, 12:04 pm
por Eternal Idol
Eliminar dll que estoy usando
.NET (C#, VB.NET, ASP)
El Benjo 3 2,810 Último mensaje 6 Agosto 2015, 23:16 pm
por El Benjo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines