PDA

Visualizza versione completa : [Vb6]Come posso migliorare sto cod?


Kleidemos
14-12-2002, 17.55.14
' La somma di due integer può essere superiore a 32768,
' quindi è meglio restituire un long
Public Function Addiziona(n As Integer, m As Integer) As Long
Dim ris As Long
ris = n + m
Addiziona = ris
End Function
' Non è necessario restituire un long, ma per coerenza...
Public Function Sottrai(r As Integer, l As Integer) As Long
Dim risul As Long
ris = r - l
Sottrai = risul
End Function
' Stesso discorso fatto per la moltiplicazione....
Public Function Moltiplica(n As Integer, m As Integer) As Long
Dim ris As Long
ris = n * m
Moltiplica = ris
End Function
' Così puoi restituire anche risultati con decimali
Public Function Dividi(n As Integer, m As Integer) As Single
Dim ris As Long
ris = n / m
Dividi = ris
End Function
'Cancella dalla Ram il prog
Private Sub Chiudi_Click()
Unload Princ
End Sub

Private Sub diviso_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
res.Text = Dividi(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub infos_Click()
Dim info
info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub meno_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
res.Text = Sottrai(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub per_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
res.Text = Moltiplica(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub plus_Click()
If IsNumeric(primo.Text) = True And IsNumeric(secondo.Text) = True Then
res.Text = Addiziona(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub Readme_Click()
Dim info
info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub


come lo miglioro????????

P8257 WebMaster
14-12-2002, 18.25.08
.. Se volessi essere veramente cattivo ti direi : "cambiando linguaggio" :D .. però non lo sono, quindi ti do un paio di consigli:

innanzitutto indentalo bene, tutto ! .. non se se molti spazi siano spariti perché se li è mangiati il forum .. ma io vedo che deve essere indentato...

secondo: perché ti appoggi ad un valore transitorio dimensionato a parte come long quando la stessa funzione ritorna un long?

basta scrivere <funzione> = operazione senza passare dalla variabile intermedia che occupa solo memoria (e tanta!)

terzo: le condizioni valutate con operatori logici come AND vanno sempre separate da parentesi:

quindi IF (condizione1) AND (condizione2) .. THEN
questo aiuta la leggibilità

Quarto: non è necessario scrivere "= TRUE" . basta scrivere: "IsNumeric(numero)" .. perché l'if valuta sempre il true.


Quinto: se fosse programmato ad oggetti ti avrei bastonato per quel public .. ma così non è .. quindi passiamola liscia

sesto: ciao

Bye :cool:

Kleidemos
14-12-2002, 18.27.17
ora riprovo, ok?

Kleidemos
14-12-2002, 18.31.27
Ora?

' La somma di due integer può essere superiore a 32768,
' quindi è meglio restituire un long
Public Function Addiziona(n As Integer, m As Integer)
Dim ris As Long
ris = n + m
Addiziona = ris
End Function
' Non è necessario restituire un long, ma per coerenza...
Public Function Sottrai(r As Integer, l As Integer)
Dim risul As Long
ris = r - l
Sottrai = risul
End Function
' Stesso discorso fatto per la moltiplicazione....
Public Function Moltiplica(n As Integer, m As Integer)
Dim ris As Long
ris = n * m
Moltiplica = ris
End Function
' Così puoi restituire anche risultati con decimali
Public Function Dividi(n As Integer, m As Integer)
Dim ris As Single
ris = n / m
Dividi = ris
End Function

Private Sub diviso_Click()
If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
res.Text = Dividi(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub infos_Click()
Dim info
info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub meno_Click()
If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
res.Text = Sottrai(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub per_Click()
If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
res.Text = Moltiplica(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub plus_Click()
If (IsNumeric(primo.Text)) And (IsNumeric(secondo.Text)) Then
res.Text = Addiziona(primo.Text, secondo.Text)
Else
res.Text = "Non è un numero valido!"
End If
End Sub

Private Sub Readme_Click()
Dim info
info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub

P8257 WebMaster
14-12-2002, 20.37.50
.. ma perché questo passaggio:


Public Function Addiziona(n As Integer, m As Integer)
Dim ris As Long
ris = n + m
Addiziona = ris
End Function


se Ris è > di 32768 cosa succede?
(magari funziona lo stesso, ma solo perché il basic è magnanimo nella gestione dei tipi)

perché non così?

PRIVATE Function Addiziona(n As Integer, m As Integer) AS LONG
Addiziona = n + m
End Function


.. poi questo public? ..

Sono solo consigli, nessuna critica

Bye :cool:

Kleidemos
14-12-2002, 20.39.39
Originariamente inviato da P8257 WebMaster
.. ma perché questo passaggio:


Public Function Addiziona(n As Integer, m As Integer)
Dim ris As Long
ris = n + m
Addiziona = ris
End Function


se Ris è > di 32768 cosa succede?
(magari funziona lo stesso, ma solo perché il basic è magnanimo nella gestione dei tipi)

perché non così?

PRIVATE Function Addiziona(n As Integer, m As Integer) AS LONG
Addiziona = n + m
End Function


.. poi questo public? ..

Sono solo consigli, nessuna critica

Bye :cool:

Tnk

LoryOne
15-12-2002, 15.25.03
Potresti persino fare così:


Function Func_Operazione(Operatore as String, _
PrimoVal as Single, _
SecondoVal as Single)As Single
Dim Risultato As Single

If Not IsNumeric(PrimoVal) Or Not IsNumeric(SecondoVal) Then
MsgBox "Inserire due numeri ",vbExclamation + vbOkOnly,"Attenzione !"
Else
Select Case Operatore
Case "+":Risultato=PrimoVal+SecondoVal
Case "-":Risultato=PrimoVal-SecondoVal
Case "*":Risultato=PrimoVal*SecondoVal
Case "/":Risultato=PrimoVal/SecondoVal
End Select
End If
Func_Operazione=Risultato
End Function

Private Sub infos_Click()
Dim info
info = MsgBox("Programma by Kleidemos88 { francesca8810@tin.it }", vbInformation, "About....")
End Sub

Private Sub Readme_Click()
Dim info
info = MsgBox("Scrivete i 2 numeri e cliccate sul simbolo interessato", vbInformation, "Readme")
End Sub

Private Sub plus_Click()
Res.Text=Func_Operazione("+",Primo.Text,Secondo.Text)
End Sub

Private Sub meno_Click()
Res.Text=Func_Operazione("-",Primo.Text,Secondo.Text)
End Sub

Private Sub diviso_Click()
Res.Text=Func_Operazione("/",Primo.Text,Secondo.Text)
End Sub

Private Sub per_Click()
Res.Text=Func_Operazione("*",Primo.Text,Secondo.Text)
End Sub

LoryOne
15-12-2002, 15.46.39
...mi sa comunque che se non trasformi in numeri Primo.Text e Secondo.Text prima di passarli alla funzione, il compilatore ti dia un errore.

Passali con Val(Primo.Text) e Val(Secondo.Text)

LoryOne
15-12-2002, 16.28.52
Potresti rivedere il tutto in questo modo:
Inserisci 2 TextBox chiamate TxtPrimoVal e TxtSecondoVal
Inserisci una Label chiamata LblRisultato
Inserisci un CommandButton chiamato CmdCalcola
Inserisci un array di OptionBox chiamato OptOperatore da 0 a 3, cioè:
1) Inserisci il primo OptionBox
2) Fai un copia del controllo
3) Fai un incolla del controllo rispondendo di Si al messagebox che ti appare

In fine inserisci il codice seguente:


Option Explicit

Private Indice As Integer

Private Sub CmdCalcola_Click()
If Not IsNumeric(TxtPrimoVal) Or Not IsNumeric(TxtSecondoVal) Then
MsgBox "Immettere due valori", vbExclamation + vbOKOnly, "Attenzione !"
Else
Select Case OptOperatore(Indice).Tag
Case "+": LblRisultato = Val(TxtPrimoVal) + Val(TxtSecondoVal)
Case "-": LblRisultato = Val(TxtPrimoVal) - Val(TxtSecondoVal)
Case "*": LblRisultato = Val(TxtPrimoVal) * Val(TxtSecondoVal)
Case "/"
If Val(TxtSecondoVal) = 0 Then
MsgBox "Il secondo valore non può essere zero", vbExclamation + vbOKOnly, "Attenzione !"
Else
LblRisultato = Val(TxtPrimoVal) / Val(TxtSecondoVal)
End If
End Select
End If
End Sub


Secondo me così è anche meglio.
Attento, però ?
Qual'è il valore di LblRisultato se inserisco 1,2 (Virgola, non punto) in TxtPrimoVal e 2 in TxtSecondoVal ?
Se hai voglia vedi se riesci a risolvere il problema.

Ciao :)

LoryOne
15-12-2002, 16.31.59
Scusa, mi ero dimenticato un pezzo.
Il codice completo è questo:


Option Explicit

Private Indice As Integer

Private Sub CmdCalcola_Click()
If Not IsNumeric(TxtPrimoVal) Or Not IsNumeric(TxtSecondoVal) Then
MsgBox "Immettere due valori", vbExclamation + vbOKOnly, "Attenzione !"
Else
Select Case OptOperatore(Indice).Tag
Case "+": LblRisultato = Val(TxtPrimoVal) + Val(TxtSecondoVal)
Case "-": LblRisultato = Val(TxtPrimoVal) - Val(TxtSecondoVal)
Case "*": LblRisultato = Val(TxtPrimoVal) * Val(TxtSecondoVal)
Case "/"
If Val(TxtSecondoVal) = 0 Then
MsgBox "Il secondo valore non può essere zero", vbExclamation + vbOKOnly, "Attenzione !"
Else
LblRisultato = Val(TxtPrimoVal) / Val(TxtSecondoVal)
End If
End Select
End If
End Sub

Private Sub Form_Load()
OptOperatore(0).Tag = "+"
OptOperatore(1).Tag = "-"
OptOperatore(2).Tag = "*"
OptOperatore(3).Tag = "/"
End Sub

Private Sub OptOperatore_Click(Index As Integer)
Indice = Index
End Sub

Kleidemos
15-12-2002, 16.54.51
ok, tnk!