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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Mi primera aplicación en vb.net
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi primera aplicación en vb.net  (Leído 2,741 veces)
Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Mi primera aplicación en vb.net
« en: 17 Diciembre 2014, 13:44 pm »

Buenos días , desde hace una semana estoy siguiendo un curso de visual basic.net , y hoy me he puesto a intentar hacer algo MUY básico como lo es una calculadora.Pido que no se me infravalore solo por ello , ya que estoy empezando , y el haber podido llevar a cabo la calculadora , por muy fácil que sea , es un gran paso para mí.
Realmente la calculadora no tiene nada innovador , toda ella se basa en los operadores aritméticos incluyendo lel operador mod(si es que se le llama operador).La aplicación se compone en cuatro bloques , por llamarlo de alguna manera , cada bloque con dos textbox y un button , un bloque para multiplicar , otro para sacar el resto de una división , otro para la suma y un último para la resta.

Me gustaría que me dierais opiniones respecto al código , respecto a si puede simplificarse el código , si hay expresiones mal utilizadas o algún consejo a tener en cuenta para más adelante.Sin más , aquí os lo dejo , un saludo y gracias.

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
  4.        Dim numero1, numero2, resultadosuma As Integer
  5.        numero1 = txt1.Text
  6.        numero2 = txt2.Text
  7.        resultadosuma = numero1 + numero2
  8.        MsgBox(resultadosuma)
  9.  
  10.  
  11.    End Sub
  12.  
  13.    Private Sub txt3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt3.TextChanged
  14.  
  15.    End Sub
  16.  
  17.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  18.        Dim numero3, numero4, resultadoresta As Integer
  19.        numero3 = txt3.Text
  20.        numero4 = txt4.Text
  21.        resultadoresta = numero3 - numero4
  22.        MsgBox(resultadoresta)
  23.    End Sub
  24.  
  25.    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  26.        Dim numero5, numero6, resultadoresto As Integer
  27.        numero5 = txt5.Text
  28.        numero6 = txt6.Text
  29.        resultadoresto = numero5 Mod numero6
  30.        MsgBox(resultadoresto)
  31.  
  32.    End Sub
  33.  
  34.    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  35.        Dim numero7, numero8, resultadomultiplicacion As Integer
  36.        numero7 = txt7.Text
  37.        numero8 = txt8.Text
  38.        resultadomultiplicacion = numero7 * numero8
  39.        MsgBox(resultadomultiplicacion)
  40.  
  41.  
  42.    End Sub
  43. End Class


« Última modificación: 17 Diciembre 2014, 13:46 pm por Orb » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: Mi primera aplicación en vb.net
« Respuesta #1 en: 17 Diciembre 2014, 14:34 pm »

Como siempre se utilizan las 2 variables para recoger los valores y uno para calcularas, ponerlas generales. Es decir,
Código
  1. Public Class Form1
  2.  
  3.   ' # Aqui sólo que no me acuerdo como se programa en .NET jajajaja
  4.   Public iNum1, iNum2, iResultado As Integer
  5.  
  6.   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
  7.      ' Cada vez que requieras usarla, sólo la seteas con un valor 0 o directamente con el valor del TextBox
  8.      iNum1 = txt1.Text
  9.      iNum2 = txt1.Text
  10.      iResultado = iNum1 + iNum2
  11.      MsgBox "Resultado: " & iResultado
  12.   End Sub
  13.  
  14.   ' --- SNIP ----


En línea

Te vendería mi talento por poder dormir tranquilo.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Mi primera aplicación en vb.net
« Respuesta #2 en: 17 Diciembre 2014, 22:19 pm »

hoy me he puesto a intentar hacer algo MUY básico como lo es una calculadora.Pido que no se me infravalore solo por ello , ya que estoy empezando

No creo que eso sea algo que deba preocuparte, aqui estamos para ayudar, no para juzgar quien eres por cuanto sabes.


toda ella se basa en los operadores aritméticos incluyendo lel operador mod(si es que se le llama operador)

Si, es un operador:
Mod Operator (Visual Basic)


Me gustaría que me dierais opiniones respecto al código , respecto a si puede simplificarse el código , si hay expresiones mal utilizadas.

El único inconveniente que le veo es que estás utilizando el DataType Integer, y esto para una calculadora no es lo más apropiado xD, ya que la capacidad máxima de un Integer es poca, y excluye la posibilidad de usar y calcular correctamente decimales.

Aparte de eso, el código en general se puede simplificar mucho, ya que utilizas la abundante repetición de código para hacer lo mismo 4 veces,
eso es de lo más normal en alguien que está aprendiendo, pero mi consejo es que debes acostumbrarte cuanto antes a programar de forma dinámica, es una aventura que te brindará un sin fin de posibilidades, te ayudará a estructurar el código y eso evitará en parte que acabes escribiendo un código spaghetti (Spaghetti code - Wikipedia, the free encyclopedia).

Por un lado, está la Class principal.
Lo más destacable de esta modificación que he escrito sería el Type "MathInfo" y la multiple subscripción del mismo evento de todos los botones, combinando ambas cosas nos ayuda a elaborar la tarea de forma dinámica utilizando la propiedad Tag de los botones para asociar un objeto "MathInfo" a cada botón, esto nos evita tener que duplicar código innecesario.
Y en fín, todo esto nos lleva siempre al método "DoMaths", donde podemos implementar controles de errores, etc. (eso ya es cosa tuya)

También debo decir que lo he estructurado basándome en tu ejemplo, es decir, que esto se podría simplificar más si fuera otro caso, donde no tuvieras 8 TextBoxes para 8 valores distintos y 4 botones.

Código
  1. Option Strict On : Option Explicit On : Option Infer Off
  2.  
  3. Imports WindowsApplication1.MathTools
  4.  
  5. Public Class Form1
  6.  
  7. #Region " Types "
  8.  
  9.    Private Class MathInfo
  10.        Public Property Control1 As Control
  11.        Public Property Control2 As Control
  12.        Public Property MathOperation As MathOperation
  13.    End Class
  14.  
  15. #End Region
  16.  
  17. #Region " Event Handlers "
  18.  
  19.    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
  20.    Handles Me.Load
  21.  
  22.        Me.Button1.Tag = New MathInfo With
  23.                         {.Control1 = Me.txt1, .Control2 = Me.txt2, .MathOperation = MathOperation.Sum}
  24.  
  25.        Me.Button2.Tag = New MathInfo With
  26.                         {.Control1 = Me.txt3, .Control2 = Me.txt4, .MathOperation = MathOperation.Rest}
  27.  
  28.        Me.Button3.Tag = New MathInfo With
  29.                         {.Control1 = Me.txt5, .Control2 = Me.txt6, .MathOperation = MathOperation.DivisorRemainder}
  30.  
  31.        Me.Button4.Tag = New MathInfo With
  32.                         {.Control1 = Me.txt7, .Control2 = Me.txt8, .MathOperation = MathOperation.Multiply}
  33.    End Sub
  34.  
  35.    ''' <summary>
  36.    ''' Handles the Click event of the Button controls.
  37.    ''' </summary>
  38.    Private Sub Buttons_Click(ByVal sender As Object, ByVal e As EventArgs) _
  39.    Handles Button1.Click,
  40.            Button2.Click,
  41.            Button3.Click,
  42.            Button4.Click
  43.  
  44.        Me.DoMaths(DirectCast(DirectCast(sender, Button).Tag, MathInfo))
  45.  
  46.    End Sub
  47.  
  48. #End Region
  49.  
  50. #Region " Methods "
  51.  
  52.    ''' <summary>
  53.    ''' Performs an arithmetic operation with the values contained on the specified <see cref="T:MathInfo" />.
  54.    ''' And shows an informative <see cref="T:MessageBox" /> with the resulting value.
  55.    ''' </summary>
  56.    Private Sub DoMaths(ByVal mathInfo As MathInfo)
  57.  
  58.        Dim value1 As Decimal = CDec(mathInfo.Control1.Text)
  59.        Dim value2 As Decimal = CDec(mathInfo.Control2.Text)
  60.        Dim mathOperation As MathOperation = mathInfo.MathOperation
  61.        Dim result As Decimal = MathTools.GetMathResult(value1, value2, mathOperation)
  62.  
  63.        MessageBox.Show(CStr(result), String.Format("Resulting value of an {0} operation", mathOperation.ToString),
  64.                        MessageBoxButtons.OK, MessageBoxIcon.Information)
  65.  
  66.    End Sub
  67.  
  68. #End Region
  69.  
  70. End Class

Y por otro lado, lo apropiado es separar las funciones que haces en otra Class, donde puedes implementar las herramientas relacionadas con la aritmética:

( Ten en cuenta que "simplificar", no siempre significa escribir menos )

Código
  1. ''' <summary>
  2. ''' Contains related Mathematial tools.
  3. ''' </summary>
  4. Public NotInheritable Class MathTools
  5.  
  6.    ''' <summary>
  7.    ''' Specifies an arithmetic operation.
  8.    ''' </summary>
  9.    Public Enum MathOperation As Integer
  10.  
  11.        Sum = 1I
  12.        Rest = 2I
  13.        Multiply = 3I
  14.        DivisorRemainder = 4I
  15.  
  16.    End Enum
  17.  
  18.    ''' <summary>
  19.    ''' Performs an arithmetic operation with the specified two values.
  20.    ''' </summary>
  21.    ''' <param name="value1">The first value.</param>
  22.    ''' <param name="value2">The second value.</param>
  23.    ''' <param name="mathOperation">The arithmetic operation.</param>
  24.    ''' <returns>The resulting value.</returns>
  25.    ''' <exception cref="System.ArgumentException">mathOperation</exception>
  26.    Public Shared Function GetMathResult(ByVal value1 As Decimal,
  27.                                         ByVal value2 As Decimal,
  28.                                         ByVal mathOperation As MathOperation) As Decimal
  29.  
  30.        Select Case mathOperation
  31.  
  32.            Case MathTools.MathOperation.Sum
  33.                Return (value1 + value2)
  34.  
  35.            Case MathTools.MathOperation.Rest
  36.                Return (value1 - value2)
  37.  
  38.            Case MathTools.MathOperation.Multiply
  39.                Return (value1 * value2)
  40.  
  41.            Case MathTools.MathOperation.DivisorRemainder
  42.                Return (value1 Mod value2)
  43.  
  44.            Case Else
  45.                Throw New ArgumentException("Tu mensaje de error aquí", "mathOperation")
  46.                Return 0D
  47.  
  48.        End Select
  49.  
  50.    End Function
  51.  
  52. End Class

Espero que te haya servido.

Saludos.
« Última modificación: 17 Diciembre 2014, 22:42 pm por Eleкtro » En línea



Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Mi primera aplicación en vb.net
« Respuesta #3 en: 18 Diciembre 2014, 22:49 pm »

Muchas gracias , Shell Root y Elektro.
Mientras continuaba con la calculadora me di cuenta de que el código era muy repetitivo y tendría que existir alguna forma de simplificarlo , aparte de otras cosas.

Muchas gracias por vuestros consejos¡

Un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines