Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conversion implicite ou explicite ?

10 réponses
Avatar
Bonjour,

Je me posais la question : est-il préférable de convertir implicitement ou
explicitement ?

Pour répondre à la question de la durée d'exécution, j'ai fait 1 test ainsi
(VB .Net 2008 Express) :

Public Class Form_Tests_conversions_implicites_ou_explicites

Private Sub Button_Conversion_implicite_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button_Conversion_implicite.Click

Dim début As Date = Now
Dim b As Byte
Dim s As Short
Dim fin As Date

Me.TextBox_Durée_conversion_implicite.Text = ""

For j As Integer = 1 To Me.TextBox_Nombre_itérations.Text

For l As Long = Byte.MinValue To Byte.MaxValue

b = l

Next

For l As Long = Int16.MinValue To Int16.MaxValue

s = l

Next

Next

fin = Now
Me.TextBox_Durée_conversion_implicite.Text =
fin.Subtract(début).TotalMilliseconds

End Sub

Private Sub Button_Conversion_explicite_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button_Conversion_explicite.Click

Dim début As Date = Now
Dim b As Byte
Dim s As Short
Dim fin As Date

Me.TextBox_Durée_conversion_explicite.Text = ""

For j As Integer = 1 To CInt(Me.TextBox_Nombre_itérations.Text)

For l As Long = Byte.MinValue To Byte.MaxValue

b = CByte(l)

Next

For l As Long = Short.MinValue To Short.MaxValue

s = CShort(l)

Next

Next

fin = Now
Me.TextBox_Durée_conversion_explicite.Text =
fin.Subtract(début).TotalMilliseconds.ToString

End Sub

End Class


La conversion la plus rapide est celle implicite.

Mais est-il préférable de convertir implicitement ? ou explicitement ?

Merci d'avance pour vos avis,
Stéphane

10 réponses

Avatar
Patrice
Plus rapide certes mais les résultats obtenus sont ? Et la durée totale est
? Ne pas oublier que même si c'est 100 fois plus rapide mais que l'on passe
de 0,01 à 0,0001 s, cela veut dire que l'on ne verra de toute façon rien...

Personnellement je préfère option strict on et convertir explicitement pour
favoriser la maintenance et la clarté plutôt que la rapidité (sans doute
illusoire sauf conversions intensives).

Ce cas semble également un peu académique car en situation réelle on
éviterait sans doute de toute façon la conversion...




<Stéphane> a écrit dans le message de groupe de discussion :

Bonjour,

Je me posais la question : est-il préférable de convertir implicitement ou
explicitement ?

Pour répondre à la question de la durée d'exécution, j'ai fait 1 test
ainsi (VB .Net 2008 Express) :

Public Class Form_Tests_conversions_implicites_ou_explicites

Private Sub Button_Conversion_implicite_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button_Conversion_implicite.Click

Dim début As Date = Now
Dim b As Byte
Dim s As Short
Dim fin As Date

Me.TextBox_Durée_conversion_implicite.Text = ""

For j As Integer = 1 To Me.TextBox_Nombre_itérations.Text

For l As Long = Byte.MinValue To Byte.MaxValue

b = l

Next

For l As Long = Int16.MinValue To Int16.MaxValue

s = l

Next

Next

fin = Now
Me.TextBox_Durée_conversion_implicite.Text =
fin.Subtract(début).TotalMilliseconds

End Sub

Private Sub Button_Conversion_explicite_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Button_Conversion_explicite.Click

Dim début As Date = Now
Dim b As Byte
Dim s As Short
Dim fin As Date

Me.TextBox_Durée_conversion_explicite.Text = ""

For j As Integer = 1 To CInt(Me.TextBox_Nombre_itérations.Text)

For l As Long = Byte.MinValue To Byte.MaxValue

b = CByte(l)

Next

For l As Long = Short.MinValue To Short.MaxValue

s = CShort(l)

Next

Next

fin = Now
Me.TextBox_Durée_conversion_explicite.Text =
fin.Subtract(début).TotalMilliseconds.ToString

End Sub

End Class


La conversion la plus rapide est celle implicite.

Mais est-il préférable de convertir implicitement ? ou explicitement ?

Merci d'avance pour vos avis,
Stéphane




Avatar
Patrice
Je confirme sur 10 000 itérations j'ai 30 ms de différence autant dire
rien...

Avec option strict on et en évitant les conversions je gagne 1 000 ms (sur
20 000 conversions donc même si c'est techiquement plus rapide, la aussi
l'impact dans des conditions réelles est insignifiant).

Donc je confirme la bonne pratique habituelle :
- utiliser tout simplement Option Strict On ce qui permet de ne convertir
explicitement que lorsque c'est nécessaire et ce qui donne à la fois un
bénéfice en performance pure (à mon avis très mineur) et surtout en
maintenance (à mon avis bien plus significatif).

--
Patrice
Avatar
Bonjour et merci Patrice,

Option Strict On, direct, pour Conversion implicite, ca fait Erreur au lieu
de Avertissement sachant que par défaut, c'est Aucun.
Ceci dit, ca ne change pas grand chose, je n'aime pas laisser
d'avertissement, même si ca a l'utilité de pouvoir tester en mode débug.

Concernant la vitesse, je suis tout à fait d'accord, même s'il y a 1 gain de
vitesse en conversion implicite, ce n'est que de la poudre aux yeux.

Bon, je vais donc suivre ton conseil, et mettre Option Strict On dans les
propriétés du projet.

Merci encore et bonne journée, j'ai du débug à faire ! lol

Stéphane


"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de news:

Je confirme sur 10 000 itérations j'ai 30 ms de différence autant dire
rien...

Avec option strict on et en évitant les conversions je gagne 1 000 ms (sur
20 000 conversions donc même si c'est techiquement plus rapide, la aussi
l'impact dans des conditions réelles est insignifiant).

Donc je confirme la bonne pratique habituelle :
- utiliser tout simplement Option Strict On ce qui permet de ne convertir
explicitement que lorsque c'est nécessaire et ce qui donne à la fois un
bénéfice en performance pure (à mon avis très mineur) et surtout en
maintenance (à mon avis bien plus significatif).

--
Patrice





Avatar
Patrice
> Bon, je vais donc suivre ton conseil, et mettre Option Strict On dans les
propriétés du projet.

Merci encore et bonne journée, j'ai du débug à faire ! lol



Il est possible de mettre Option Strict Off dans les fichiers, puis de
mettre le project en Option Strict On.

Cela permet :
- d'utiliser Option Strict On pour les nouveaux fichiers
- de pouvoir corriger le code existant à ton rythme fichier par fichier en
supprimant progressivement les options strict off

Dans de rares cas, cela permet aussi de garder une partie de code en option
strict off (par exemple pour du "late binding") si nécessaire...

--
Patrice
Avatar
Richard Clark
Patrice a écrit :
Bon, je vais donc suivre ton conseil, et mettre Option Strict On dans les
propriétés du projet.

Merci encore et bonne journée, j'ai du débug à faire ! lol



Il est possible de mettre Option Strict Off dans les fichiers, puis de
mettre le project en Option Strict On.

Cela permet :
- d'utiliser Option Strict On pour les nouveaux fichiers
- de pouvoir corriger le code existant à ton rythme fichier par fichier en
supprimant progressivement les options strict off

Dans de rares cas, cela permet aussi de garder une partie de code en option
strict off (par exemple pour du "late binding") si nécessaire...

--
Patrice





J'irai même un peu plus loin :
Option Strict sur On
Option Infer sur Off

Soit exactement le contraire des options par défaut de MS :P

--
Richard Clark
http://www.c2i.fr
Le 1er site .NET
Avatar
Pas de soucis, c'est déjà tout débuggué :) (je préfère ne pas remettre au
lendemain si je peux faire le jour même)
Bon, faut dire que l'option de correction d'erreur aide bien, même pas
besoin de réfléchir !
Cbyte, ok, vas-y, Clng, ok, vas-y ! Ctype, parfait !

++
Stéphane

"Patrice" <http://scribe-fr.blogspot.com/> a écrit dans le message de news:

Bon, je vais donc suivre ton conseil, et mettre Option Strict On dans les
propriétés du projet.

Merci encore et bonne journée, j'ai du débug à faire ! lol



Il est possible de mettre Option Strict Off dans les fichiers, puis de
mettre le project en Option Strict On.

Cela permet :
- d'utiliser Option Strict On pour les nouveaux fichiers
- de pouvoir corriger le code existant à ton rythme fichier par fichier en
supprimant progressivement les options strict off

Dans de rares cas, cela permet aussi de garder une partie de code en
option strict off (par exemple pour du "late binding") si nécessaire...

--
Patrice





Avatar
Patrice
Ok, cela dépend effectivement de la taille du code déjà existant ;-)
Avatar
Patrice
> Option Infer sur Off



Salut Richard, tu n'aimes pas Infer ?

--
Patrice
Avatar
Richard Clark
Patrice a écrit :
Option Infer sur Off



Salut Richard, tu n'aimes pas Infer ?

--
Patrice








J'ai fais une formation il y a pas longtemps pour des débutants en VB
.NET. Après leur avoir expliquer que tout est typé, que les variables
représentent un objet, etc. c'est difficile de leur dire que le code
suivant est cool :

Dim i = "4"

Ca me rappele une discussion récente sur l'équivalent en C# avec var.
var en C# est utilisé à tirlarigo actuellement sur les exemples du web
et c'est, à mon avis, une grosse erreur. On pense savoir ce que l'on
manipule sans en être sur en réalité.

De manière générale, tout ce qui n'est pas explicite, j'aime pas ;-)
--
Richard Clark
http://www.c2i.fr
Le 1er site .NET
Avatar
Patrice
> J'ai fais une formation il y a pas longtemps pour des débutants en VB
.NET. Après leur avoir expliquer que tout est typé, que les variables
représentent un objet, etc. c'est difficile de leur dire que le code
suivant est cool :



Je l'utilise car c'est bien pratique avec LINQ. Ceci dit c'est vrai que je
m'aperçois que j'utilise l'inférence de type que pour les types anonymes et
je continue à typer explicitement le reste (de toute façon même si je ne
voulais pas, cela serait sans doute une habitude difficile à perdre alors
que je suis devenu incapable de taper "objet" en français sans mettre un c
et adresse sans me demander si il ne faudrait pas deux d).

--
Patrice