ProgrammationDéveloppeur Visual Basic Middle/Senior

Quelle est la différence entre Option Strict On et Off en Visual Basic, quelles erreurs prévient l'activation de Strict et comment écrire correctement du code en mode strict ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Contexte de la question
L'option Option Strict a été introduite dans Visual Basic .NET pour améliorer la sécurité des types. Dans les versions antérieures du langage (VB6), des conversions de types implicites se produisaient, ce qui entraînait un comportement inattendu du programme et des erreurs difficiles à détecter. Activer Strict rend le comportement plus explicite et strictement typé.

Problème
Les conversions de types implicites (par exemple, l'attribution d'une chaîne à une variable numérique ou le retour de différents types d'une fonction) entraînent des erreurs au moment de l'exécution. Les projets avec Option Strict Off sont souvent à l'origine de bugs difficiles à identifier.

Solution
Avec Option Strict On, les conversions de types implicites ne sont pas autorisées, toutes les déclarations de variables, les paramètres et les types de retour des fonctions doivent être explicitement spécifiés. Cela prévient toute une classe d'erreurs déjà au moment de la compilation et favorise une haute qualité de code.

Exemple de code :

Option Strict On Dim x As Integer x = "123" ' Erreur de compilation — la conversion explicite est obligatoire x = CInt("123") ' OK Function GetNumber(ByVal input As String) As Integer Return input ' Erreur de compilation End Function

Caractéristiques clés :

  • Nécessite une conversion explicite des types.
  • Interdit les conversions implicites d'extension.
  • Force à déclarer le type pour chaque variable et chaque valeur de retour.

Questions pièges.

Pourquoi avoir besoin de Option Strict Off, si Strict On est plus pratique et sûr ?

Option Strict Off est utilisé pour soutenir l'ancien code où de nombreuses conversions implicites sont déjà intégrées (par exemple, migration depuis VB6). Dans de nouveaux projets, il est recommandé d'activer Strict pour un code plus fiable et sécurisé.

Peut-on rétablir la rigueur du choix des types au niveau du fichier, si le projet est par défaut Off ?

Oui, vous pouvez ajouter la directive Option Strict On au début d'un module ou d'un fichier spécifique, et la vérification stricte des types sera appliquée uniquement à ce fichier.

' Au début du fichier : Option Strict On

Strict empêche-t-il d'utiliser le late binding via Object ?

Oui, avec Option Strict On, il n'est pas possible d'appeler des membres d'objets non reconnus au moment de la compilation (late binding). Il faut convertir les objets à un type connu via des interfaces ou utiliser un fonctionnement dynamique uniquement avec Off.

Erreurs type et anti-patterns

  • Utiliser Option Strict Off uniquement par refus de travailler avec la sécurité des types.
  • Conversion de types implicite entraînant des exceptions lors de l'exécution.
  • Opérations de casting massives, sans vérifier la possibilité de conversion, par exemple, via CInt, CDbl, etc. sans TryParse.

Exemple de la vie réelle

Cas négatif

Un programmeur n'a pas activé Option Strict, et lors de la saisie de données à partir d'une zone de texte TextBox, les valeurs étaient directement attribuées à des variables numériques. L'entrée de données erronées faisait planter le programme.

Avantages :

  • Démarrage rapide.
  • Moins de code au stade du développement.

Inconvénients :

  • Beaucoup d'erreurs lors de l'exploitation.
  • Difficile de rechercher la cause de bugs inattendus.

Cas positif

Le programmeur a activé Option Strict On, toutes les conversions étaient effectuées explicitement via TryParse. Les erreurs étaient détectées au moment de la compilation, les exceptions au moment de l'exécution étaient minimales.

Avantages :

  • Fiabilité, lisibilité, prévisibilité du code.
  • Les erreurs sont rapidement identifiées.

Inconvénients :

  • Le volume de code augmente légèrement.
  • Excellentes compétences en conversion de types sont nécessaires.