IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Visual Basic n'est pas encore mort
Microsoft annonce les changements apportés à la version 14 du langage

Le , par Amine Horseman

142PARTAGES

6  2 
Le premier langage de programmation qui nous passe par la tête quand on pense à la programmation .Net c’est le C#. Cependant, Visual Basic n’a pas encore été abandonné par Microsoft et pour cause, ce langage reste encore très utilisé dans les écoles, mais aussi par plusieurs développeurs qui ne veulent pas changer de langage, d’autant plus que côté performances il n’a rien à se reprocher par rapport à C#, puisqu’il utilise le même IDE et les mêmes binaires.

Hier, Microsoft a annoncé les nouveautés apportées à Visual Basic 14 (la version 13 ayant été ignorée pour rester dans le même numéro de version que l’IDE). Parmi ces nouveautés, on peut citer l’introduction de l’opérateur « ?. » dont le but est de vérifier si une variable, une propriété ou un objet est nul avant de tenter d’y accéder, ou aussi pour vérifier si on est en train d’invoquer une méthode d’une référence qui n’existe pas. Par exemple, le code suivant :

Code : Sélectionner tout
If customer IsNot Nothing AndAlso customer.Age > 100 Then
Deviendra :

Code : Sélectionner tout
If customer?.Age > 100 Then
Lucian Wischik explique sur MSDN que l'opérateur « ?. » est plus sûr puisque dans l’exemple « l’expression "customer?.Age" lit la variable customer dans une variable temporaire, vérifie si elle n’est pas nulle, puis récupère la propriété Age de cette variable temporaire. Ce qui est thread-safe même si customer est nul ».

Un autre changement qu’on peut citer aussi est que les propriétés en lecture seule (Readonly) peuvent désormais être déclarées et initialisées directement dans la même ligne, comme montré dans la figure suivante :


Nouvelle manière d'initialiser les propriétés Readonly, Source : MSDN

Concernant les chaines de caractères, il n’est plus nécessaire d’ajouter des & à la fin de la ligne pour indiquer qu’elles s’étendent sur la ligne suivante, puisque le compilateur détecte cela automatiquement à présent. De plus, il existe une autre manière de les formater en utilisant l’interpolation de chaines (String Interpolation). Donc au lieu d’écrire :

Code : Sélectionner tout
String url = String.Format("http://{0}/{1}?query={2}", site, path, q) ;
On écrira :

Code : Sélectionner tout
String url = $"http://{site}/{path}?query={q}";
À noter que cette dernière fonctionnalité n’est pas encore disponible dans la preview de Visual Studio 2015, mais sera intégrée dans la version finale. Vous pouvez consulter ici la liste de tous les changements apportés jusqu’à maintenant et ceux qui vont venir.

Source : Blog MSDN

Et vous ?

Qu’en pensez-vous ? Quelles nouveautés voulez-vous voir intégrées au langage ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 08/01/2015 à 22:23
Citation Envoyé par candide02 Voir le message
Pourquoi faire simple quand on peut faire compliqué ?
Depuis VB6 les "améliorations" de VB ne sont que des complications - avis tout à fait perso bien sur.
Effectivement, VB.NET est plus complexe que ne l'était VB6. Mais il est aussi et surtout beaucoup plus puissant... VB6 était un langage basé sur des objets, mais pas réellement orienté objet : par exemple, il n'y avait pas de notion d'héritage, qui est quand même la base des langages OO... VB6 est très bien pour apprendre à coder (c'est d'ailleurs un des premiers langages que j'ai utilisés) et faire de petites applications simples. Ses proches cousins VBA et VBScript sont tout à fait adaptés pour faire des macros, de l'automatisation de tâches bureautique et du scripting système. Mais pour développer de vraies applications complexes, VB6/VBA/VBS sont vraiment trop limités...

Citation Envoyé par candide02 Voir le message
Mais l'usine à gaz Studio de Microsoft me dépasse... et on appelle cela un langage pour débutant ?
Mais c'est toi qui appelles ça un langage pour débutant... VB.NET n'est pas plus un langage pour débutant que C# (d'ailleurs les fonctionnalités sont quasiment les mêmes, ainsi que tous les concepts liés à la plateforme .NET). C'est une idée largement répandue que VB.NET est un langage "facile" (peut-être parce que VB6 l'était), et du coup les débutants se dirigent souvent vers ce langage. Mais c'est une idée fausse... Ce qui est malheureux à mon sens, c'est que beaucoup de choses dans la syntaxe de VB.NET ne sont là que pour le faire paraitre plus simple, en masquant certaines subtilités qui sont pourtant essentielles à comprendre. Du coup, quand on tombe sur un bug lié aux limites de ces "simplifications", on sait plus quoi faire parce qu'on ne comprend pas vraiment le fonctionnement du langage. Je pense par exemple aux instances par défaut de Form dans les applications Windows Forms ; c'est probablement la "feature" la plus aberrante de VB.NET, et elle n'existe que pour éviter aux développeurs d'avoir à comprendre des concepts de POO...

Quant au fait que Visual Studio soit une usine à gaz : c'est pas complètement faux, mais ça s'explique et se compense par le fait que c'est un IDE extrêmement riche et complet. Comme je le disais dans un autre topic, s'il y a bien une application qui me retiens sous Windows, c'est bien Visual Studio. Evidemment l'IDE de VB6 était beaucoup plus léger, mais il était aussi beaucoup moins riche en fonctionnalités... si je devais recommencer à l'utiliser, j'aurais l'impression de revenir à l'âge de pierre.

Citation Envoyé par candide02 Voir le message
A quand un retour à la simplicité d'un VB6 ?
C'est pas demain la veille. Du point de vue de Microsoft, VB6 est mort et enterré. Il y a plein de gens qui continuent à l'utiliser, mais il n'évolue plus depuis au moins 15 ans. VB.NET, pendant ce temps, s'améliore, mais il ne va pas devenir plus "simple".

Citation Envoyé par candide02 Voir le message
Ne tuons pas Basic qui n'est pas un langage pour les nuls.
Il faudrait savoir... d'abord tu dis que c'est supposé être un langage pour débutant, et ensuite tu dis que ce n'est pas un langage pour les nuls (bon, OK, débutant n'est pas synonyme de nul, mais quand on débute, on commence forcément par être nul...)
VB6 est un peu un langage "pour les nuls" (ce qui en fait ne veut pas dire grand chose), ou du moins un langage pour ceux qui n'ont pas envie de se prendre la tête avec des concepts avancés. VB.NET est un langage avancé (bien qu'un peu bancal à mon avis), qui effectivement n'est pas "pour les nuls", puisqu'il nécessite une bonne compréhension de la POO et de la plateforme .NET.
4  0 
Avatar de
https://www.developpez.com
Le 11/12/2014 à 9:28
Bonjour,
depuis la version 3 Microsoft nous à vendu Vb comme un langage instinctif! comme si l'instinct était de mise en programmation professionnel!

des le début Vb avait de quoi devenir un grand langage, la notion de classe était embryonnaire mais présente; le Visuel Basic Application à compliqué la donne reléguant le Vb à un rôle de bidouillage de deuxième zone pour développeur spaghettis et/ou procédural!

cette mauvaise réputation est due en partie à cela mais également au recruteur qui déroule un discourt qui ne comprenne pas.

je suis un pur produit Vb et je suis ravis de voir que vb continue moi aussi!
3  0 
Avatar de mactwist69
Membre émérite https://www.developpez.com
Le 22/12/2014 à 15:10
Pour ma part, j'ai commencé la programmation par le bon vieux C-AINSI/C++ et le java à l'époque... Ce qui ne m'avait pas passionné outre mesure. (En passant plus de temps à comprendre le langage qu'à codé).

Et puis il a fallu que je travaille, et je suis comme vous tombé dans le VB, depuis je ne fais QUE ça.

Il est lisible et puissant (si on s'en sert bien). Du coup, de mon point de vue, ce langage est pratique à la fois pour apprendre et pour développer rapidement. On peut rapidement faire des choses toute bête, et petit à petit apprendre les subtilités.

La dernière chose que j'ai envie, c'est de retrouver les accolades pour faire un If, les pointeurs, les déclarations de pointeurs de variables, des pointeurs de pointeur, les & les *.... et mettre un point virgule à chaque ligne... Gérer la taille des tableaux (bien que je crois que l'allocation dynamique de mémoire ne se fait plus partie du .NET)

Puis pour déclarer une variable... en commençant par son type, j'ai jamais compris... C'est pour aider le pauvre compilateur tout ça en fait... Il arrive pas à mettre les choses dans l'ordre lol.

Comme pour les points-virgules, en fait il faut lui dire quand la ligne s'arrête, sinon il est bête il prends tout ton code et le lit comme un fichier texte ! Tout comme le type void d'une fonction... qui sert à dire qu'on ne retourne rien....

En fait le C# c'est le développeur qui assiste la machine, le VB l'inverse !
(Je suis de partie pris, vous l'aurez compris!)
4  1 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 11/12/2014 à 12:13
Citation Envoyé par Amine Horseman Voir le message
Visual Basic n’est pas encore mort
En même temps je ne crois pas avoir entendu qui que ce soit dire qu'il l'était

Citation Envoyé par Pol63 Voir le message
concernant la fabrication de string, je reste plus sceptique, une variable en chaine de caractère ca reste caduque en terme de vérification à la compilation
je pense que dans ce cas il n'y a pas de vérification, mais ca reste possible donc s'ils l'ont mis c'est bien, mais ca reste une syntaxe que je n'utiliserais pas
Si, c'est vérifié par le compilateur. En fait, le compilateur transforme l'expression d'interpolation en un string.Format équivalent. Si tu écris ça :
Code : Sélectionner tout
String url = $"http://{site}/{path}?query={q}";
le compilateur le transforme en ça :
Code : Sélectionner tout
String url = string.Format("http://{0}/{1}?query={2}", site, path, q);
et vérifie normalement les expressions "path", "site" et "q"

Tu auras même l'intellisense dans ta string
2  0 
Avatar de sinople
Membre chevronné https://www.developpez.com
Le 11/12/2014 à 12:17
Je rejoins les avis précédent, particulièrement pour le ?. Le fameux IsNot Nothing de la variable c'était pas le top point de vue lisibilité du code.

Quand au débat c# et VB, je trouve qu'il n'a pas vraiment lieu d'être parce que c'est surtout une histoire de syntaxe.

Si c# a tendance a être plus proche de java, de faire du code condensé (d'un point de vue nombre de caractère) et en théorie d'avoir une meilleur productivité en écriture de code au kilomètre. J'aime beaucoup le coté verbeux de Visual Basic qui rend le code beaucoup plus human readable.
2  0 
Avatar de sevyc64
Modérateur https://www.developpez.com
Le 11/12/2014 à 20:33
Citation Envoyé par Sehnsucht Voir le message
L'histoire sur le And et le AndAlso là je suis carrément paumé ; en C# on a aussi & et && donc je vois pas le souci à en avoir 2 ; leurs rôles respectif sont clairement définis.
les opérateurs AND et & (dont j'ignorais l'existence en tant qu'opérateur de test) ont l'inconvénient de systématiquement évaluer les 2 expressions de chaque coté de l'opérateur avant d'en déduire le résultat. Il faut donc prendre garde qu'elles soient toutes les 2 évaluables et donc multiplier les tests. Le AND est un héritage des anciens VB et surtout des Basic.

Les opérateurs ANDALSO et && sont les opérateurs de test ET LOGIQUE des langages à la syntaxe C like. Ici, la seconde expression n'est évaluée que et seulement que si l'évaluation de la première n'a pas permis de déterminer le résultat du test. C'est un fonctionnement qui beaucoup plus logique en informatique et en développement, et dans tout domaine de manière générale. Inutile de désosser le moteur de la voiture à partir du moment que l'on sait que la panne est due à un réservoir vide.

L'opérateur AND (et donc maintenant & en C#) est une aberration en soi dans nos programmations modernes. Je fais parti des fervent militants (même déjà au temps de VB6) pour l'abandon pur et simple de cet opérateur.
Il en va de même pour l'opérateur OR qui devrait être abandonné au profit du ORELSE (ainsi que de la boucle FOR qui devrait fonctionner comme dans les langages C like)
2  0 
Avatar de Kropernic
Expert confirmé https://www.developpez.com
Le 11/12/2014 à 9:20
Hello,

Pareil que Pol63 concernant les changements évoqués. Autant les premiers sont les bienvenus, autant le dernier concernant les chaînes de caractères me semble douteux. Je trouve quand même l'ancienne écriture bien plus lisible !

Ou alors il aurait fallu faire changer la couleur des noms de variables qui sont entre les accolades... Enfin ce n'est que mon avis.

Sinon, concernant le débat entre VB et C#, comme cela a déjà été dit, le VB n'a rien à envier au C# et le fait que VB soit délaissé pour pas mal de choses est vraiment regrettable.

A l'école, j'ai appris le VB6, quand je suis passé à .NET par curiosité avec le framework 1, je suis logiquement passé sur VB.NET et j'ai assez vite retrouvé mes jeunes.

Dernièrement je me suis mis à C# histoire de faire un petit projet perso avec XNA et franchement, je trouve le C# bien moins clair en lecture que le VB.NET. Un reproche qui est souvent fait à VB est d'être trop verbeux. Je trouve personnellement que c'est justement une qualité et pas un défaut.

C'est quand même beaucoup plus lisible d'avoir les End If, End While, End For, etc. au lieu d'une série d'accolade fermante "}". Et quand en plus VS n'indente pas les accolades correctement*, ça devient vite le bordel.

*J'ai d'ailleurs été très étonné qu'un truc aussi basic soit mal fait pour le C#. Une chose de ce genre ne m'est jamais arrivée en VB.NET. A moins que ce soit propre à l'utilisation de XNA ??

My 2 cents...
2  1 
Avatar de ACIVE_CS
Membre averti https://www.developpez.com
Le 11/12/2014 à 13:22
Bonjour à tous,

Je ne me suis pas encore documenté sur les versions à venir, mais je suis d'accord avec tout le monde, ces évolutions sont utiles et nécessaires.
Bien que je trouve que la syntaxe s'éloigne un peu du VB, mais bon, c'est pas génant et on s'y fait rapidement.

Je crois que le VB c'est comme la potion magique de Asterix, et nous sommes tous des Obelix... nous sommes tombés dedans étant petits...

Perso, j'ai commencé avec le ZX Spectrum en 86 ou 87 je crois (je sais ça ne me rajeuni pas)
si vous cliquez sur l'image vous verrez que chaque touche contient déjà des instructions en basic...

Je n'ai aucun problème à reprendre ou à faire une application en C# ou Java (notamment pour Android).
Mais à des moments donnés quand j'ai besoin de quelque chose bien spécifique, je me retrouve avec un bout de code en VB traduit en C#...

En parlant de Android, j'ai bien sur commencé en Java au début, bon, il faut se familiariser à la structure des applications etc.
Et puis, depuis quelques mois j'ai découvert Basic4android.
Un excellent travail de compilation VB/Java fait par Anywhere Software, depuis je n'utilise que ça, je viens d'équiper un amphithéâtre dans une université avec une tablette Android et une application en VB!...

Comme dit rdurupt, je suis ravis de voir que vb continue moi aussi!

A+
1  0 
Avatar de Sehnsucht
Membre chevronné https://www.developpez.com
Le 11/12/2014 à 16:08
J'ai rien compris
Dire que Not cust Is Nothing est trop long est un non sens (ça ne fait qu'un seul caractère de moins que cust IsNot Nothing) pour la lisibilité en revanche je suis un peu d'accord c'est pas génial (c'est pas catastrophique non plus)
L'histoire sur le And et le AndAlso là je suis carrément paumé ; en C# on a aussi & et && donc je vois pas le souci à en avoir 2 ; leurs rôles respectif sont clairement définis.
Quant aux tableaux, je ne suis pas sûr d'avoir compris, si c'est le "problème" d'avoir à écrire 1 là où ça donne 2 éléments ; ce n'est pas près de changer ; il a toujours été précisé que ce qu'on donne sont les bornes des dimensions pas la taille de la dimension (après on aime ou on aime pas mais c'est comme ça et ça représenterait un trop gros breaking change pour que ça change un jour à mon avis)
2  1 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 11/12/2014 à 20:50
Citation Envoyé par MABROUKI Voir le message
L'amelioration concernant du test concernant les types references me parait etre une fausse amelioration ...
Jugez-en
En .Net 1.1 le malheureux codeur devait ecrire cette longue ligne (IsNot n'exisait pas) totalement incomprehensible :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
Private cust As Customer
    Public Sub New()

        If Not (cust Is Nothing) Then

        End If
    End Sub
En .Net 2.0 ,l'operateur IsNot (la negation d'un type reference en c#) est "invente",un de plus...On est soulage:
Code : Sélectionner tout
1
2
3
4
5
6
7
8
Private cust As Customer
    Public Sub New()

      If cust IsNot Nothing Then

        End If
    End Sub

Maintenant ce qu'il faut c'est eliminer le AndAlso et avoir un seul And comme en c# qui fait le "court-circuit" pour les types references ...
on aurait bien aime ecrire comme en c# le code d'exemple cite :
Code : Sélectionner tout
1
2
3

If customer IsNot Nothing And customer.Age > 100 Then
And et AndAlso n'ont pas le même sens, et changer And pour qu'il fasse la même chose que AndAlso serait une très mauvaise idée (ça pourrait casser du code existant).

Sinon, j'ai l'impression que tu n'as pas bien compris le but de cette amélioration... Ce sera peut-être plus clair avec un exemple plus extrême ; tu préfères écrire ça :
Code : Sélectionner tout
1
2
3
4
Dim city As String = "(unknown)"
If order IsNot Nothing AndAlso order.Customer IsNot Nothing AndAlso order.Customer.Address IsNot Nothing AndAlso order.Customer.Address.City IsNot Nothing Then
    city = order.Customer.Address.City
End If
ou ça ?
Code : Sélectionner tout
Dim orderCity As String = If (order?.Customer?.Address?.City, "(unknown)")
En ce qui me concerne, le choix est vite fait...
(c'est également plus performant, car chaque propriété n'est évaluée qu'une seule fois)

Citation Envoyé par MABROUKI Voir le message

Qu'en est-il de l'inconvenient "debile" de la declaration de tableaux comme l'as bien releve Tomlev ou vous specifier un tableau à 2 dimensions comme suit :
Code : Sélectionner tout
1
2
 Private Customers(1) As Customer
La mise en conformite serait la bienvenue ... !!!
Oui, c'est un des trucs qui m'énervent en VB... mais malheureusement ça ne changera pas, puisque ce serait un breaking change.
2  1