Feedback

VB - Fluent IsBetween extension method

Veröffentlicht von am 27.06.2015
(0 Bewertungen)
This snippet offers an extension method for fluent "is between" comparison for integers. You can simply replace integer by any other numeric type, making it generic would make it not being a snippet anymore.

An example to use this extension method:

int x = 3;
if(x.IsBetween(0).And(5))
'x is between 0 and 5!
GFU-Schulungen  [Anzeige]

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

Imports System.Runtime.CompilerServices

Public Module ComparisonExtensions

    ''' <summary>Call .And() on the result!</summary>
    <Extension()> _
    Public Function IsBetween(value As Integer, minimum As Integer) As AndHelper
        Return New AndHelper() With { _
                .[And] = Function(maximum) (value > minimum) AndAlso (value < maximum)}
    End Function
End Module

Public NotInheritable Class AndHelper
    Public [And] As Func(Of Integer, Boolean)
End Class

Abgelegt unter Fluent, Is, Between, Extension, Method.

6 Kommentare zum Snippet

Koopakiller schrieb am 28.06.2015:
Auf einer deutschen Seite wäre eine deutsche Beschreibung vermutlich besser geeignet. Ansonsten: http://dotnet-snippets.com

Was ich nur nicht verstehe ist, warum man es sich so kompliziert machen muss. Ich schrieb auch mal eine "IsBetween" Methode, die aber min und max entgegen nimmt.
Thomas Roskop schrieb am 29.06.2015:
Ja, ich hätte es auch eher anders gemacht:


//
// Überrpüft, ob @value größer als @min aber kleiner als @max ist.
//
public static bool IsInRangeE(int min, int max, int value) {
return (value > min && value < max);
}

//
// Überrpüft, ob @value größer-gleich als @min aber kleiner-gleich als @max ist.
//
public static bool IsInRangeI(int min, int max, int value) {
return (value >= min && value <= max);
}

Veluxe schrieb am 01.07.2015:
Nichts anderes wird ja bei diesem fluent wrapper verwendet:
(value > minimum) && (value < maximum)

Es steht ja auch extra im Titel Fluent, da die Anwendung der Funktion im Quellcode fließend lesbar ist.
Koopakiller schrieb am 01.07.2015:
Trotzdem ist es unnütze Arbeit. Deine Lösung basiert darauf eine weitere Klasse zu instanziieren etc., was alles relativ viel Leistung braucht.
Wenn du etwas fließend lesbares haben willst, dann baue dir so etwas auf:
static bool IsInALine(int min, int value, int max){...}

Nur so etwas wirst du 1. nur sehr selten in .NET finden und 2.: einfacher zu lesen ist es auch nicht wirklich.

Veluxe schrieb am 01.07.2015:
Ob das unnütz ist könnte man philosopieren, gibt genügend Fluent APIs die so etwas anbieten. Da steht primär nunmal nicht die Performance an erster Stelle, sondern Lesbarkeit. LINQ instanziiert auch neue Klassen etc. und man könnte es anders machen, das ist aber für mich kein Argument es anders lösen zu müssen. Es gibt bei stackoverflow einen Thread da werden genau solche Methoden ausgetauscht. Also die Putzfrau sagte mir mit ihren bescheidenen Englischkentnissen, dass sie x.IsBetween(0).And(5) verstanden hat, bei IsBetween(x, 0, 5) konnte sie mir nicht sagen was nun Minimum und Maximum sind.
Koopakiller schrieb am 01.07.2015:
Man muss immer abwägen zwischen Leistungsverschwendung und vielleicht besserem Programmierstil. LINQ kann kaum effizienter sein, zumal das EF beispielsweise nochmals im Hintergrund optimiert. Deine Lösung ist jedoch aus Leistungssicht schlicht ineffizient und würde sich besser machen lassen.
Auch geht es nicht darum ob die Putzfrau es lesen kann, sondern ob sie selbst darauf kommen würde es so zu schreiben, wenn sie bisher nur die IsBetween(x,y,z) Syntax kennt - wie es fast das gesamte .NET verwendet. Denn sonst bringt es ihr nichts.

Du kannst den Code gerne so verwenden, aber erfahrungsgemäß sind die, die so etwas schreiben oder verwenden auch die die sich über die Ausführungsgeschwindigkeit beklagen.
 

Logge dich ein, um hier zu kommentieren!