Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              ternäre oder nicht Ternary? [Geschlossen]                                      54 Antworten                          
  •     
    

ich wirklich wirklich wie das Bedingungsoperator in C #. Es macht mein Leben sehr viel einfacher in der Logik wie das Schreiben:

public  string FormattedFileName
    {
        get
        {
            return string.Format("{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 
             ? "0" + DateTime.Now.Month.ToString()
             : DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 
             ? "0" + DateTime.Now.Day.ToString()
             : DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
        }
    }

Natürlich bedeutet, dass ich die Lesbarkeit des Codes zu verlieren. Wie auch immer, ich bin nur neugierig, welche Meinung andere Kolleginnen und Entwickler auf diesem Ansatz des Schreibens Code. Vielen Dank. Ich schätze sowohl negative als auch positive Kommentare gleichermaßen.

War es hilfreich?

Lösung

Wie es? Verwenden Sie es: Nicht

// if (Like it) then (Use it) else (Don't)

Andere Tipps

Wenn Sie es brauchen, ist der ternäre Operator von unschätzbarem Wert. Ich denke jedoch, dass es oft bessere Möglichkeiten, sich auszudrücken. Im Beispiel Sie gab, warum nicht einen Format-String verwenden, die genau das tun, was Sie wollen: "{0:00}_{1:00}_{2}_{3}.xls", so dass Sie Ihren Code wesentlich vereinfachen

?

Wenn Sie wollte es machen mehr readble Sie immer die Anrufe in getCurrent Monat ausklammern könnte (), getCurrentYear, getCurrentDate ruft ....

Das Beispiel Sie haben, ist ein Missbrauch der bedingte Operator ,

Es kann viel deutlicher auf diese Weise ausgedrückt werden:

public string FormattedFileName
{
    get {
       return DateTime.Now.ToString("MM_dd_yyyy") +
          "_DownLoaded_From_Clients.xls";
    }
}

Ich finde den Konditionaloperator sehr nützlich und es oft. Bei richtiger kann es helfen, Code zu vereinfachen, indem es übersichtlicher zu machen.

Im Allgemeinen ich vermeiden mehrere conditionals in derselben Anweisung verketten, wird es schnell sehr verwirrend, in Code führt, die nicht aufrechterhalten werden kann.

ich auch das finden ?? sehr nützlich und sehr oft finden Ternäre, die leicht mit ?? ersetzt werden können.

Zum Beispiel:

a == null? "empty" : a

ersetzt werden kann:

a ?? "empty"

Comic-Mann sagt. "Worst Verwendung von ternären Operator je."

Ablesbarkeit erreicht werden kann, die Verwendung des Eindrucks, Leerzeichen durch und, wie Dave sagte, Kommentare.

Meine persönliche Faustregel, dass, wenn es ganz offensichtlich ist, was die ternäre der Fall ist, dann ok es ist. Wenn es in einer Zeile nur vollgestopft ist so der Codierer ein ternäres verwenden könnte, dann sollte es eine if-Anweisung eingeklammert sein.

Ich kann es nur verwenden für einfache if-Anweisungen, höchstens zwei. Noch mehr als das, und ich würde es eher schreiben, den langen Weg als um es so aussehen zu haben wie das, was Sie auf dem Laufenden. Dann wieder versuche ich, nicht mehr als zwei Ebene von verschachtelten zu haben, wenn Aussagen in erster Linie, so dass sie nie wirklich kommen.

Ich bin alle Bedingungsoperator für die Verwendung, aber Sie es hier nicht brauchen ...

return string.Format("{0}_{1}_{2}_{3}.xls", 
    DateTime.Now.Month.ToString("00"), 
    DateTime.Now.Day.ToString("00"), 
    DateTime.Now.Year, 
    "DownLoaded_From_Clients");

Ich mag nicht, wie man es benutzt habe. Ich benutze es, wenn ich es einfach auf einer Zeile passen, anstatt mit einer mehrzeiligen if-Anweisung.

Ich liebe den tertiären Operator. Es ist nur ein Problem, wenn Sie nicht vertraut mit der Notation sind. Es ist manchmal schwierig, Dokumentation auf dem einsamen Betreiber zu finden, aber wenn es in der Dokumentation und Büchern wurden verwendet, um Ich glaube, dass es viel mehr an Popularität gewinnen würde.

Wenn Sie einen Blick in der ‚funktionalen‘ Welt nehmen, wo man nicht bedingt Dinge ‚tun‘, ist der Bedingungsoperator sehr verbreitet. In der einen oder anderen, habe ich den Eindruck, dass das funktionale Paradigma Interesse gewinnt, weil es die zeitliche Ablaufsteuerung nimmt, verursacht durch „if (this) DoThis sonst dothat“ Aussagen. Es macht es einfacher, wirklich definieren , was Sie meinen, anstatt den Computer zu sagen, was zu tun ist.

Ablesbarkeit ist ein Problem, in Sprachen aber, dass dies nicht in vollem Umfang unterstützen.

Debuggeability ist eine andere: in z.B. C ++, können Sie keinen Haltepunkt auf nur einen der Zweige.

ich wie der ternäre Operator dont überhaupt - es ist nicht sehr gut lesbar ist und ich wirklich mürrisch, wenn ich Fehlerbehebung tun und wie das Zeug finden

.

Kommentar Code, wenn Sie über die Lesbarkeit Sorgen machen, sonst sehe ich keinen Grund, es nicht zu benutzen.

Ein paar Klammern Hilfe Lesbarkeit immensly.

Erwägen Sie sie genau zu helfen, zu klären, was Ihr Wechsel Bediener tut, und Sie sollten in Ordnung sein. :)

Warum nicht tun etwas mehr wie das?

public  string FormattedFileName
{
    get
    {
        return string.Format(
            "{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 ?
                "0" + DateTime.Now.Month.ToString() :
                DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 ?
                "0" + DateTime.Now.Day.ToString() :
                DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
    }
}

Hinweis: Ich habe nicht den Code ändern überhaupt, nur die Formatierung. Wie bereits erwähnt, müssen Sie hier nicht den bedingten Operator verwenden, aber ein wenig Pflege mit Vertiefung kann immens Lesbarkeit verbessern. Ich liebe den Bedingungsoperator, aber wenn Sie alle Ihre Codes zusammen in einem dichten Block ohne Einbuchtung laufen, es wird nicht lesbar sein, egal welche Operatoren Sie verwenden.

Es ist ternärer Operator genannt (wir nennen nicht Binär-Code der Sekundär Code , nachdem alle), und es wurde gebeten, vor:

Ist dies eine sinnvolle Nutzung des ternären Operator

scroll top