Calculatrice pro

cabs517 Messages postés 1 Date d'inscription samedi 11 février 2017 Statut Membre Dernière intervention 11 février 2017 - 11 févr. 2017 à 00:19
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 11 févr. 2017 à 17:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/101839-calculatrice-pro

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
11 févr. 2017 à 17:03
Salut à toi Whismeril
Je salue ici ton "professionnalisme" dans les commentaires que tu as mis sur cette source .
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié par Whismeril le 11/02/2017 à 14:29
Bonjour

un petit extrait des règles de ce site
http://codes-sources.commentcamarche.net/faq/10009-regles-pour-poster-une-nouvelle-source
des calculatrices, il y en a la pelle, et ton code n'a rien révolutionnaire.

Une autre règle est que la diffusion des coordonnées personnelles est interdite dans les posts, mais aussi dans le code, ton adresse mail est partout, ton identité dans Form4.

D'autre part tout dépot tombe sous la licence http://www.commentcamarche.net/contents/136-informations-de-copyright
donc proposer un projet contenant une licence est contraire à la charte.
Bien sûr, rien n’empêche de créer un nouveau projet est d'y importer tes forms, mais le projet n'est pas utilisable en l'état.

Une remarque ici
    Dim Carac() As Char = {"1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "A", "B", "C", "D", "E", "F"}

    Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not Carac.Contains(e.KeyChar) And Not Asc(e.KeyChar) = 8 Then

C'est bien vu de mettre les caractères autorisés dans un tableau, mais pourquoi ne pas inclure le backsapce?
    Dim Carac() As Char = {"1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "A", "B", "C", "D", "E", "F", Convert.ToChar(8)}


Ensuite, ceci répété autant de fois qu'il y a de boutons est une mauvaise pratique à 2 titres
    Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
        If check = True Then
            TextBox1.Text = ""
            TextBox1.Text = TextBox1.Text + "1"
            check = False
        Else
            TextBox1.Text = TextBox1.Text + "1"
        End If
    End Sub


D'abord le but d'une calculatrice est de travailler sur des nombres, ton code travaille sur du texte.
Utiliser une variable numérique serait plus dans la logique du travail sur des nombres
Dim saisieEnCours as Double = 0


    Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
        If check Then'If se base sur un boolean, donc pas besoin de tester = True
            saisieEnCours = 0
            check = False
        End If
        'pas besoin du esle non plus ça évite d'écrire 2 fois la même chose.
        saisieEnCours = saisieEnCours * 10 + 1
        TextBox1.Text = saisieEnCours.ToString()
    End Sub

De cette façon, c'est saisieEncours qui sert ensuite pour les calculs.

La 2eme raison pour laquelle c'est une mauvaise pratique c'est que tu as 10 fois le même code, donc 10 fois plus de boulot quand il faudra corriger quelque chose (travailler sur des nombres par exemple....).
La bonne pratique est d'abonner une seule méthode à tous les boutons qui font quelque chose de similaire.
    Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click, Button18.Click, Button8.Click, Button10.Click 'etc....
        Dim boutonAppelant As Button = CType(sender, Button)

        Dim valeurSaisie As Integer = Convert.ToInt32(boutonAppelant.Text())

        If check Then
            saisieEnCours = 0
            check = False
        End If

        saisieEnCours = saisieEnCours * 10 + valeurSaisie

        TextBox1.Text = saisieEnCours.ToString()
    End Sub



Pour faire des calculs de trigo en degres, tu divises la valeur par 57.29577951
Val(TextBox1.Text) / 57.29577951

Et Math.PI sert à quoi à ton avis?

Enfin, VB.Net est un langage objet (pas orienté objet, objet tout court) et tu n'as écrit aucune classe métier, genre celle qui fait les calculs....
Cette classe aurait pu être le petit plus qui permette de se dire "OK encore une calculette, mais cette fois ça montre comment se servir d'une classe."

Le principe de CodeS SourceS (même s'il est assez peu respecté) est de proposer des codes pédagogiques (autrement qui montre un exemple à suivre), entre les remarques de VB95 (que je salue au passage) et les miennes, ton projet est plus un exemple à ne pas suivre....
Et quand toi même tu dis
car serieusement jai pas eu le temps de le finir
, sérieusement, ça ne donne pas envie que ce code reste sur le site.
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
11 févr. 2017 à 01:10
Bonjour
Plusieurs remarques
1) "Convertir" s'écrit sans "e" à la fin !
2) Un joli mélange de Vb6 et VB Net . voir ce tutoriel pour plus de détail : http://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
principalement supprimer l'importaition de Microsoft Visual Basic dans les références et la mise sur On des 2 options Strict et Explicit
3) 82 erreurs si on met Option Strict sur On : VB Net est moins permissif que VB6
Val(Textbox1.Text)
n'est pas admis car Val attend un paramètre numérique de type Double par exemple
4) Les Buttons ont une propriété Name : tu peux leur donner un nom lorsque tu les déposes sur la Form : BoutonSinus est plus parlant que Button18 par exemple
5) J'aime bien le design de la Calculatrice par contre
Rejoignez-nous