Microsoft's IsNot Patent. Was haltet Ihr davon?

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    Microsoft's IsNot Patent. Was haltet Ihr davon?

    Hallo Community

    Mir ist vor Kurzem wieder eingefallen, dass Microsoft den IsNot Operator patentieren lies. Eine kurze Google Suche brachte heraus, dass das Patent seit dem 18. November 2003 anerkannt wurde.

    Nun würde mich interssieren:

    Was denkt Ihr ist der Hintergedanke (also der tatsächliche Hintergedanke) der Sache. Die offizielle Version ist ja, dass die Marktsituation Microsoft dazu gezwungen hätte diesen Schritt zu machen (wenn ich das richtig verstanden habe).
    Ich halte mich mit meiner Version besser zurück...

    Verwendet Ihr den IsNot Operator?
    Ich verwende normalerweise Not A Is B anstelle von A IsNot B (siehe auch nächste Frage).

    Welche Alternative(n) kennt Ihr?
    Meine ist If Not A Is B Then.

    Und als kleine Umfrage: Was würdet Ihr patentieren lassen, wenn es irgendwas sein könnte?
    Ich würde die Kugel patentieren lassen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    a = b vergleicht meines Wissens nach, ob die Werte gleich sind.
    a Is b vergleicht, ob beide Zeiger auf den selben "Platzt im Speicher" verweisen.

    VB.NET-Quellcode

    1. Dim a As Integer = 1
    2. Dim b As Integer = 1
    3. If a = b Then
    4. 'Dieser Code wird ausgeführt
    5. End If
    6. If a Is b Then
    7. 'Dieser Code wird ... nicht mal zugelassen... aber es geht um's Prinzip: nicht ausgeführt
    8. End If
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    "If a <> b Then" verwende ich persönlich eher selten und wenn, dann nur, wenn es um Zahlenwerte geht.
    Wenn es sich um Strings oder andere Objekte handelt, dann kommt es mir irgendwie komisch vor, zu vergleichen, ob a kleiner oder größer b ist.

    ThuCommix schrieb:

    "=" kürzer als "is" von daher :p


    Niko Ortner schrieb:

    a = b vergleicht meines Wissens nach, ob die Werte gleich sind.
    a Is b vergleicht, ob beide Zeiger auf den selben "Platzt im Speicher" verweisen.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Hi
    Wenn der Compiler nicht optimiert sieht es als compilierter Code halt anders (und zwar meist länger) aus.
    (wie IL stackbasierter) Pseudocode mit Kürzeln:
    a IsNot b:
    PUSH a
    PUSH b
    NEQ
    JE B
    ;Code der aus zu führen ist, wenn a != b

    B: ;...

    Not a Is b:
    PUSH a
    PUSH b
    EQ
    NOT
    JE B
    ;Code der aus zu führen ist, wenn a != b

    B: ;...

    Insofern wird der Schritt EQ, NOT durch NEQ ersetzt, was 1 Schritt verkürzt. Sowas wird allerdings häufig vom Compiler wegoptimiert, wenn das Flag aktiviert wurde. Übrigens ist Is für einen Vergleich auf die gleiche Referenz da (dürfte das gleiche wie Object.ReferenceEquals sein) und = für den Vergleich von Wertetypen, bei denen a und b "dasselbe" sind, wenn alle Felder den selben Wert enthalten. Somit kann man auch a = b bzw. a <> b schreiben. Man kann natürlich den =- bzw. <>-Operator einer Klasse ebenfalls überschreiben (Public Shared Operator...).

    @m9898: Dein Code funktioniert übrigens nicht (ungetestet). Beide Message-Boxen werden angezeigt, da ja die entsprechende Antwort von True/False zurückgegeben und nicht der im jeweiligen Parameter geschriebene Code ausgeführt wird.

    Gruß
    ~blaze~
    Mal sehen:
    Mit IIf

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Me.Text = IIf(CheckBox1.Checked, MessageBoxUndTrue, MessageBoxUndFalse).ToString
    3. End Sub
    4. Private Function MessageBoxUndTrue() As Boolean
    5. MessageBox.Show("Das ist die True MessageBox")
    6. Return True
    7. End Function
    8. Private Function MessageBoxUndFalse() As Boolean
    9. MessageBox.Show("Das ist die False MessageBox")
    10. Return False
    11. End Function


    Egal, ob die CheckBox aktiviert ist oder nicht, beide MessageBoxen werden angezeigt.
    Allerdings: Wenn die CheckBox aktiviert ist steht als Fenstertitel "True", weil MessageBoxUndTrue True zurückgibt.
    Und wenn nicht steht "False".

    Hingegen mit If:

    VB.NET-Quellcode

    1. Me.Text = If(CheckBox1.Checked, MessageBoxUndTrue, MessageBoxUndFalse).ToString

    Es wird nur eine MessageBox angezeigt. Und zwar die, die sich durch das Abzweigen anhand des ersten Parameters von If() ergibt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Verwendet Ihr den IsNot Operator?
    Klar? Dafür ist er da?

    Man darf übrigens nicht vergessen, dass man für Klassen Operatoren (und somit auch den =-Operator) selbst definieren kann. 2 Klassen mit dem =-Operator zu vergleichen ist also nicht unmöglich.
    Von meinem iPhone gesendet

    nikeee13 schrieb:

    Man darf übrigens nicht vergessen, dass man für Klassen Operatoren (und somit auch den =-Operator) selbst definieren kann. 2 Klassen mit dem =-Operator zu vergleichen ist also nicht unmöglich.


    Hatte ich ja auch schon geschrieben. ;)

    Was ich allerdings noch anmerken wollte ist, dass die Befehle bei meinen Pseudocodes nicht für Integers sondern für einen allgemeinen Aufruf für jegliche Klassen steht.

    Ich halte so ein Patent übrigens für fraglich. Der einzige Vorteil eines solchen Operators ist in meinen Augen, dass man einen natürlich extremen Fortschritt in der Übersichtlichkeit gewinnt, da man das natürlich viel besser lesen kann, wenn da a IsNot b statt Not a Is b steht, wenns vom Compiler eh wegoptimiert wird.

    Gruß
    ~blaze~
    Is doch egal ob sie den Patentieren lassen. Basic ist eh die einzige Sprache die sowas verwendet und Basic is nunmal von MS. In allen anderen Sprachen werden Operatoren && (und), || (oder), != (ungleich) geschrieben. Also gewinnt MS damit eigentlich nichts. Denn wenn niemand IsNot nutzt braucht man auch kein Patent.
    Anders bei Apple mit den MultiTouch Displays, die haben das taktisch Klug gemacht, den MulitTouch Displays sind groß im kommen und wenn sie das Patent drauf haben können sie ordentlich kassieren.