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
Option Strict On : Option Explicit On : Option Infer Off Imports WindowsApplication1.MathTools Public Class Form1 #Region " Types " Private Class MathInfo Public Property Control1 As Control Public Property Control2 As Control Public Property MathOperation As MathOperation End Class #End Region #Region " Event Handlers " Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles Me.Load Me.Button1.Tag = New MathInfo With {.Control1 = Me.txt1, .Control2 = Me.txt2, .MathOperation = MathOperation.Sum} Me.Button2.Tag = New MathInfo With {.Control1 = Me.txt3, .Control2 = Me.txt4, .MathOperation = MathOperation.Rest} Me.Button3.Tag = New MathInfo With {.Control1 = Me.txt5, .Control2 = Me.txt6, .MathOperation = MathOperation.DivisorRemainder} Me.Button4.Tag = New MathInfo With {.Control1 = Me.txt7, .Control2 = Me.txt8, .MathOperation = MathOperation.Multiply} End Sub ''' <summary> ''' Handles the Click event of the Button controls. ''' </summary> Private Sub Buttons_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click Me.DoMaths(DirectCast(DirectCast(sender, Button).Tag, MathInfo)) End Sub #End Region #Region " Methods " ''' <summary> ''' Performs an arithmetic operation with the values contained on the specified <see cref="T:MathInfo" />. ''' And shows an informative <see cref="T:MessageBox" /> with the resulting value. ''' </summary> Private Sub DoMaths(ByVal mathInfo As MathInfo) Dim value1 As Decimal = CDec(mathInfo.Control1.Text) Dim value2 As Decimal = CDec(mathInfo.Control2.Text) Dim mathOperation As MathOperation = mathInfo.MathOperation Dim result As Decimal = MathTools.GetMathResult(value1, value2, mathOperation) MessageBox.Show(CStr(result), String.Format("Resulting value of an {0} operation", mathOperation.ToString), MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub #End Region 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
''' <summary> ''' Contains related Mathematial tools. ''' </summary> Public NotInheritable Class MathTools ''' <summary> ''' Specifies an arithmetic operation. ''' </summary> Public Enum MathOperation As Integer Sum = 1I Rest = 2I Multiply = 3I DivisorRemainder = 4I End Enum ''' <summary> ''' Performs an arithmetic operation with the specified two values. ''' </summary> ''' <param name="value1">The first value.</param> ''' <param name="value2">The second value.</param> ''' <param name="mathOperation">The arithmetic operation.</param> ''' <returns>The resulting value.</returns> ''' <exception cref="System.ArgumentException">mathOperation</exception> Public Shared Function GetMathResult(ByVal value1 As Decimal, ByVal value2 As Decimal, ByVal mathOperation As MathOperation) As Decimal Select Case mathOperation Case MathTools.MathOperation.Sum Return (value1 + value2) Case MathTools.MathOperation.Rest Return (value1 - value2) Case MathTools.MathOperation.Multiply Return (value1 * value2) Case MathTools.MathOperation.DivisorRemainder Return (value1 Mod value2) Case Else Throw New ArgumentException("Tu mensaje de error aquí", "mathOperation") Return 0D End Select End Function End Class
Espero que te haya servido.
Saludos.