Que pensez-vous de lambdas multilignes en VB 10

voix
11

Je ne faisais que regarder une vidéo sur MSDN Channel 9 qui se trouve ici , à propos de quelques - unes des nouvelles fonctionnalités 10. Visual Basic Maintenant , j'aime la plupart des nouvelles fonctionnalités, dont certaines ont été attendues depuis longtemps (propriétés auto et collecte Initialiseur) , qui a attiré mon attention était les lambdas multilignes comme en C #.

Dans la vidéo, il a utilisé un exemple comme celui-ci:

Dim scores = {10,20,30,40,50}
Dim thread as new Threading.Thread(Sub()
                                   For Each o in scores
                                     console.writeline(o)
                                     Next
                                   End Sub)

Maintenant, j'aime VB dans tout ce qu'il verbosité mais je suis juste un peu inquiet que sous d'écriture ... fin sous en ligne pourrait être un peu en désordre, je peux voir un certain mérite à inline lorsque vous écrivez C # quand vous avez seulement d'utiliser quelque chose comme c => {....} et vous pouvez découper beaucoup de code.

Quels sont vos throughts de lambdas multilignes en VB?

Voulez-vous les trouver utiles et où?

Créé 30/10/2008 à 05:57
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
0

soutien méthode anonyme complète en VB signifie que vous pouvez commencer à prendre un style plus fonctionnel avec les choses. Si le Sub () End Sub besoin d'aller sur des lignes séparées ... ça fait mal. J'espère qu'ils avaient des méthodes anonymes permettent une seule ligne, tant il n'y avait qu'une seule déclaration.

Créé 30/10/2008 à 06:05
source utilisateur

voix
0

Vous allez avoir besoin de plusieurs lignes une fois que nous obtenons la bibliothèque ParallelFX.

Par exemple, disons que vous vouliez faire ce parallèle en boucle:

For i = 0 to 100
  '12 lines of code'
Next

La version parallèle serait:

Parallel.For( 0, 100, sub(i)
  '12 lines of code'
  End Sub )

Il fonctionne en tournant les entrailles de la boucle dans une toute nouvelle sous. Ce nouveau sous est appelé par N fils, N étant généralement le nombre de cœurs disponibles.

Créé 30/10/2008 à 07:14
source utilisateur

voix
2

Je peux penser à deux raisons du haut de ma tête pourquoi je l'aime! ATTENDIEZ trop longtemps pour cela.

Premier:

 Private Sub SomeMethod()
     Dim SomeVariable as String = "Some text."

     AddHandler SomeButton.Click, Sub()
                                      SomeVariable += " Some more text"
                                      MessageBox.Show(SomeVariable)
                                  End Sub

Seconde:

 Private Sub SomeMethodRunningInAnotherThread()
     Me.Dispatcher.Invoke(Normal, Sub()
                                      'Do some other stuff '
                                      SomeTextBox.Text = "Test"
                                  End Sub)
 End Sub
Créé 30/10/2008 à 07:54
source utilisateur

voix
14

Personnellement, je pense que la syntaxe de VB pour les délégués et lambdas est tout à fait faux. Je veux dire, allez, AddressOf! C'était bien dans VB6. Il est sans aucun doute pas bien dans une langue telle que VB.NET où les fonctions devraient être traités comme des citoyens de première classe (même si elles ne sont pas vraiment, bien sûr) et où la conversion des groupes de méthode aux délégués est plus ou moins transparents.

Maintenant , l'introduction de fonctions en ligne est horriblement bavard. Je crois en fait que l'approche C # - x => f(x)tireraient très bien en VB , car il montre exactement ce qu'il fait. Dans l'état actuel, je préfère C # pour tout travail de programmation fonctionnelle, ce qui est dommage parce que je préfère généralement VB.

Maintenant, je me réjouis vraiment que VB obtient finalement lambdas multilignes et lambdas déclaration parce qu'ils sont encore parfois utiles (prendre le cas Parallel.For). Mais la syntaxe est foiré. La même chose vaut pour les itérateurs, par la voie (si elles devraient en faire VB10).

Créé 30/10/2008 à 08:48
source utilisateur

voix
4

De préférence Je suis un développeur C #, mais ai utilisé VB 9 presque exclusivement pendant environ un an. Le # 1 chose à propos de VB 9 qui me brise le coeur est le lambdas limité. Lambdas en VB 9 sont limités par les moyens suivants:

  • Une seule déclaration.
  • Ils doivent retourner une valeur.

Ainsi, la méthode ForEach sur les collections ne fonctionnera pas avec lambdas, et seul le fonctionnera plus simple des opérations. Ainsi, la plupart du temps, vous devez déplacer votre logique à une autre méthode et utiliser AddressOf. Plusieurs fois, ce clive la lisibilité du code d'une manière dramatique et déchirante.

Il est quelque chose que je me sens beaucoup ne ramasser à moins qu'ils aient utilisé des méthodes anonymes couramment dans une autre langue qui prend en charge pleinement les (C #, JavaScript, etc.), plutôt que le soutien qu'ils ont estropié en VB 9.

Je suis extrêmement soulagé qu'ils sont la fixation lambdas en VB 10.

Créé 04/11/2008 à 17:51
source utilisateur

voix
0

Il n'y a aucun moyen facile de gérer ceci:

C # convertir corps déclaration lambda à VB

sans multilignes lambdas.

soupir

Alors oui, je suis impatient pour que cela soit complètement libéré.

-Adam

Créé 14/10/2009 à 21:21
source utilisateur

voix
2

Même ici, j'aime vb. La plupart du temps que vous pensez et pas vraiment à écrire du code de toute façon, l'argument de verbosité échoue à mon avis, que vous regardiez habituellement au code ou le modifier, et imaginez le temps que vous enregistrez la compréhension de votre code lorsque vous lisez dans son verbosité vb? Beaucoup plus facile et moins d'erreur et bug sujette par opposition à c #.

En outre, c # n'a toujours pas avec clause et vb a eu ce même avant les jours .net.

With obj.class.methods

   .property = 1

   .attribute = 2

End with

Imaginez avec 10 choses qui doivent être mis en? En c # il faudrait créer une référence à obj.class.methods et l'utiliser pour exprimer un raccourci, qui est gaspillée mémoire et inefficace, donc à cet égard vb n'utilise moins de mémoire et vous n'êtes pas Sanctionné pour moins de mémoire contrairement à c #.

Et le « en utilisant » argument mot-clé échoue puisque l'utilisation ne fonctionne pas avec la plupart des objets ou des objets qui ne mettent pas en œuvre IDisposable qui est tout à fait ennuyeux.

Ensuite, pensez à toutes les pièces moulées explicites que vous avez à faire c #, par opposition à vb. C # commet une erreur affirmeront que est encourage un meilleur codage, mais qui est un non-sens, comme tout bon développeur n'a pas besoin de quelque chose explicitement jeté 500 fois par jour pour comprendre que s'il n'a pas un casting implicite aurait lieu (comme dans vb).

La plupart c # commet une erreur l'utiliser parce qu'ils viennent de fond ca, ce qui est bien, mais je trouve beaucoup d'entre eux a commencé avec elle parce qu'il contient la lettre c et ils pensent que son refroidisseur, car il n'a pas l'innovation linguistique vb a, en fait plus difficile pour le développeur, et qui les fait se sentir plus intelligent et plus frais et surtout tout le monde - lol, ils ne comprennent pas que la complexité cache à 0 coût est le but ultime, qui est ce que vb peut faire pour vous. Remarquez la partie à coût zéro, car il ne serait pas une bonne chose si elle était au-dessus de zéro coût.

Créé 23/10/2010 à 18:53
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more