News Java 8 mit Lambda-Expressions veröffentlicht

BlooDFreeZe schrieb:
In viele Fällen ist es halt gerade kein gewurschtel wenn man einfach eine Lambda verwendet. In Verbindung mit LINQ dürfte das wohl das Paradebeispiel sein.

Aber Java funktioniert in der Hinsicht ja prinzipiell anders. Wobei ich das delegate System von C# wesentlich besser finde.


Jup. Besonders LINQ ist hier ein super Beispiel.
Ich habe gerade erst wieder eine Methode aus über 18 Zeilen auf 6 übersichtliche Zeilen verkürzt.

Die Methode aktiviert beim Laden der Anwendung wieder den Radiobutton, den ich beim Verlassen der Anwendung in der Configurationsdatei gespeichert habe.

Vorher habe ich das mit einigen verschachtelten For Each Loops und If-Abfragen gemacht, was auch gut funktioniert hat, aber ich finde mit LINQ ist das Ganze viel besser lesbar, kürzer und sogar schneller. Durch den LINQ Overhead geht zwar etwas Performance bei der Just in Time Compilierung drauf, aber dadurch, dass das die Collection mit dem AsParallel Keyword gekennzeichnet ist wird die Arbeit auf alle CPU Kerne verteilt und das Ganze läuft im Endeffekt wieder schneller ab. Selbst bei so einer kleinen Aufgabe wie dem Vergleich von ein paar Radiobuttons.

Hier der LINQ Code:

Code:
  Private Sub RestoreLastPresetSetting()

     Dim ret = From ctrl In tloPresets.Controls.AsParallel
               Let rbCtrl = TryCast(ctrl, RadioButton)
               Where rbCtrl IsNot Nothing
               Select rbCtrl.Checked = (rbCtrl.Name = _Configdata.PreviousRadioButton)
        
  End Sub


Und nochmal zum Vergleich die imperative Form in der ich die Methode vorher vorliegen hatte.

Code:
Private Sub RestoreLastPresetSetting()

    Dim prevRB As New RadioButton
    Dim noMatchingRadioButtonWasFound As Boolean = True

    For Each ctrl In tloPresets.Controls
      If TypeOf ctrl Is RadioButton Then
        Dim rbCtrl = TryCast(ctrl, RadioButton)
        If rbCtrl IsNot Nothing Then
          prevRB = rbCtrl 
          If rbCtrl.Name = _Configdata.PreviousRadioButton Then
            rbCtrl.Checked = True
            noMatchingRadioButtonWasFound = False
            Exit For
          End If
        End If
      End If
    Next

    If noMatchingRadioButtonWasFound AndAlso prevRB IsNot Nothing Then prevRB.Checked = True

  End Sub

Ich glaube beim Ersteren Beispiel erkennt man besser was der Code wirklich tut, oder?
 
Dazu muss man aber auch sagen, dass VB nicht gerade den schönsten Code hervorbringt, was deinem Beispiel hier zu Gute kommt.
 
Ansichts und sicherlich auch Gewöhnungssache.
Ich kann den C-Style absolut nicht ausstehen. Mit geschweifeten Klammern sähe der Code aber auch nicht großartig anders aus.
 
Zurück
Oben