sinnvolle Namensgebung für allgemeine Extension gesucht

  • Allgemein

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    sinnvolle Namensgebung für allgemeine Extension gesucht

    Hallo zusammen.

    Heute hab ich wohl ein recht triviales Problem: Ich hatte mir mal 3 allgemeine Extensions geschrieben, die ich inhaltlich für sinnvoll hielt. Sie machten aus folgender, bei mir vom Aufbau her nicht sooo selten vorkommender Zeile:

    VB.NET-Quellcode

    1. If Variable1MitLangemNamen < Variable2MitLangemNamen Then Variable1MitLangemNamen = Variable2MitLangemNamen: MessageBox.Show("Test")

    eine Zeile, die nur noch so aussah:

    VB.NET-Quellcode

    1. If Variable1MitLangemNamen.BecomesB_IFLess(Variable2MitLangemNamen) Then MessageBox.Show("Test")

    => in der Extension (die es auch für "größer" und "ungleich" gab, aber da kann man ja zig Extensions machen) wurde also der Vergleich zu einer anderen Variable gemacht und eine Neuzuordnung durchgeführt+True zurückgegeben, wenn die Bedingung zutrifft, sonst false. Ich hoffe, es ist klar, was ich meine.

    Irgendwann habe ich diese Extensions aus meiner Bibliothek entfernt. Ich fand sie praktisch, sie funktionierten super und sie kürzten die ein oder andere Zeile kräftig. Es scheiterte allein an der Namensgebung. Ich fand einfach keinen schlüssigen, aussagekräftigen, "instinktiv guten Namen", der die Extension sauber beschreibt. Ich hatte zum Anfang schon .A2BIfLess. Kurz. Aber zu kryptisch.
    Vielleicht habt Ihr noch kurze, knackige, punktgenaue Vorschläge.

    Wenn Ihr jetzt der Sache kritisch gegenüber steht und begründet, warum man von solchen Extensions lieber die Finger lassen solltet, ist das natürlich auch erwünscht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallöle

    Die Frage welche sich mir stellt ist eher: Warum benötige ich lange Variablennamen?
    Ich könnte bisher eigendlich immer kurze Namen verwenden ohne das ich nicht mehr wusste um was es geht.

    Ein kleiner Tipp von meiner Seite: Auch wenn ich nicht so gut Englisch kann, es hilft ENORM die Variablen alle in Egnlisch zu halten, dies kürzt die Namen, man kann keine Umlaute im Code haben und mit der "pluralisierung" tut man sich auch leichter. Habe ich mir so angewöhnt und mittlerweile ist es sogar schwer für mich diese in Deutsch zu schreiben wenn es das Projekt erfordert.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke für die Antworten, aber das geht alles ein wenig an der Sache vorbei.
    Ja, mein Code (inkl. der Variablennamen) ist immer englisch (AFAIK ;) , es sei denn, ein Kunde hat andere Vorgaben gemacht) und ich nehm mir tw. sehr viel Zeit, um einen Variablennamen festzulegen. Ich probier auch verschiedene Namen aus, um zu testen, welche Namen gut sind. Daher glaube ich auch, dass sie aussagekräftig genug sind, was die Namen manchmal etwas länger macht. Ich verwende keine Abkürzungen, es sei denn, sie sind ein gängiger Standard (Beispiel: GenerateAlphanumericStringWithSpecialCharacters).
    Aber um das geht es ja hier alles nicht (so sehr). Es geht um den Namen einer Extension.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sowas vielleicht?
    .ShorterThan
    .LongerThan
    .IsLonger
    .IsShorter

    Würde sich glaub auch "im Mund" gut anfühlen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo: Das würde in meinen Augen dem PoLS widersprechen, da die Namen einen Vegleich implizieren, aber dann deutlich mehr machen (sollen).
    @ErfinderDesRades: Ja, das geht in die richtige Richtung. Ist zwar noch nicht "the yellow of the egg", aber ich befürchte fast, dass sich solch ein von mir gesuchter Name vielleicht gar nicht auf eine nette Menge kürzen bzw. finden lässt.

    Eine m.E. etwas zu lange, aber wohl genug aussagekräftige Variante wäre wohl sowas LastIndexToUse.IsSmallerThanAndBecomes(CurrentIndexToUse) (bitte nicht an den Variablennamen aufhängen; dies ist kein Name aus einem meiner Projekte)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich finde, das sollte man überhaupt nicht als Extension anlegen. Extensions, die den ersten Parameter per ByRef neu zuweisen, sind meiner Meinung nach irreführend.
    warum?

    Extensions sollen wie Objektmethoden aussehen. Da gibt es zwei mögliche Fälle:
    Referenztypen: Eine Methode der Form Dim Foo As New Bar : Foo.DoIt(), wobei Bar ein Referenztyp ist, kann nicht den Inhalt von Foo verändern. Dazu müsste man innerhalb von Foo an Me (this in C#) eine Zuweisung machen. Das geht mit Referenztypen logischerweise nicht.
    Wertetypen: Bei Wertetypen ist das oben genannte möglich. Aber: Mutable structs are evil


    Aber vielleicht gibt es ja eine anwendungsspezifische Bezeichnung für den Vorgang, den Du da hast. Zum Beispiel: In meiner OnUtils-Bibliothek gibt es in der NotifyPropertyChanged-Klasse die ChangeIfDifferent-Funktion:

    VB.NET-Quellcode

    1. Protected Function ChangeIfDifferent(Of T)(ByRef BackingField As T, NewValue As T, ParamArray PropertyNames As String()) As Boolean
    2. If Object.Equals(BackingField, NewValue) Then
    3. Return False
    4. End If
    5. BackingField = NewValue
    6. OnPropertyChanged(PropertyNames)
    7. Return True
    8. End Function
    9. 'Verwendung:
    10. Dim _Foo As Bar
    11. Public Property Foo As Bar
    12. Get
    13. Return _Foo
    14. End Get
    15. Set(value As Bar)
    16. ChangeIfDifferent(_Foo, value, "Foo")
    17. End Set
    18. End Property

    (Der Name kommt vom "INotifyPropertyChanged", aber inzwischen würde ich die Funktion eher "UpdateIfDifferent" nennen.)

    Die Funktion ist dort verfügbar, wo sie am ehesten benötigt wird. Nämlich in abgeleiteten Klassen (typischerweise ViewModels). Ich könnte mir vorstellen, dass man den Verwendungsbereich bei Dir ebenso einschränken kann.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Niko Ortner: Entweder versteh ich Dich falsch oder umgekehrt (ich glaube, es ist Antwort A :rolleyes: ), daher werd ich mal ganz konkret. In meinen alten Backups habe ich das hier gefunden:

    VB.NET-Quellcode

    1. <Extension>
    2. Public Function A2BIfNotEqual(Of T As IComparable)(ByRef A As T, B As T) As Boolean
    3. If A.CompareTo(B) = 0 Then Return False
    4. A = B
    5. Return True
    6. End Function
    7. '[...]
    8. 'statt
    9. If SelectedUserId <> CurrentUserIdToCheck Then SelectedUserId = CurrentUserIdToCheck: MessageBox.Show("Der aktuelle Benutzer wurde geändert.")
    10. 'hätte ich mit der (bisher schlechten Benennung)
    11. If SelectedUserId.A2BIfNotEqual(CurrentUserIdToCheck) Then MessageBox.Show("Der aktuelle Benutzer wurde geändert.")

    Vielleicht kein gutes Beispiel, aber wenn man eins braucht, findet man es natürlich nicht. Ich weiß, dass ich mal bei einem alten Projekt (einem Passwortmanager :rolleyes: ) die Situation hatte, dass ich mehrere Passwort-Einstellungen für eine Seite verändern konnte (Anzahl der Zeichen, welche Zeichen sind erlaubt, welche nicht, ...), die aber dann bei auch nur einer Änderung zu einer Löschung des Passworts führten - absichtlich, weil das alte Passwort inkompatibel zu den aktuellen Website-Vorgaben geworden war. Da empfand ich es als praktisch, diese Extensions zu haben, da ich dann alles kurzfassen konnte. Nagelt mich nicht auf dieses Beispiel fest. Letztenendes ist es nur ein Name. ChangeIfDifferent ist auch eine Möglichkeit. Ich geb allerdings zu, dass ich ein Fan von solchen Namen bin: Foo.ChangeIfLessThan(Bar). Aber da sagt der Name auch noch nicht ganz aus, inwiefern Foo ge-change-d wird. Mein Englisch ist jetzt nicht sooo gut, aber die G**gle-Übersetzungsvorschläge für "angleichen" zünden bei mir (noch) nicht: Foo.AlignIfLessThan(Bar), Foo.AdjustIfBiggerThan(Bar), Foo.EqualizeIfNotEqualTo(Bar)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Den Sinn dahinter kann ich vielleicht an einem Beispiel erklären:

    VB.NET-Quellcode

    1. Function ...(t As Double, Minimum As Double, Maximum As Double) As Double
    2. Return Minimum - Math.Cos(t * Math.Pi) * (Maximum - Minimum)
    3. End Function

    Diese Funktion würde man nicht MinimumMinusCosineOfTTimesPiTimesMaximumMinusMinimum nennen, sondern CosineInterpolation.
    Ich hätte darauf gehofft, dass es in Deinem Fall auch so einen eigenen Namen gibt. Da die Funktion aber nichts sehr spezielles macht, scheint das aber leider nicht der Fall zu sein.
    So ähnlich kannst Du es Dir mit der erwähnten "Einschränkung des Verwendungsbereichs" vorstellen. Wenn ich jetzt mal das Beispiel mit dem Passwortmanager heranziehe: Die Funktion wird im Passwortmanager dort verwendet, wo das Verändern der Regeln behandelt wird. Hier würde sich anbieten, diese Funktion direkt in der Klasse zu deklarieren, in der auch die Veränderung der Regeln behandelt wird.

    Ich würde als Namen AssignIfLessThan und Derivate vorschlagen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Das klingt ziemlich passend, vielen Dank. Tja, es ist eben eine allgemeine Extension, die keinen speziellen Einsatzzweck hat, sondern tatsächlich theoretisch überall genutzt werden könnte. Damit seh ich das Thema (vorerst) als beendet.

    Vielen Dank an alle Teilnehmer.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.