سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أنا حقا حقا أحب المشغل الشرطي في C #. يجعل حياتي أسهل بكثير في الكتابة منطق مثل هذا:

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");
        }
    }

بالطبع، هذا يعني أنني أفقد قابلية قراءة التعليمات البرمجية. على أي حال، أنا فقط فضولي ما رأي زملائه الآخرين لديهم في هذا النهج من كود الكتابة. شكرا. وأنا أقدر كل من التعليقات السلبية والإيجابية على قدم المساواة.

هل كانت مفيدة؟

المحلول

يعجب ب ؟ استخدامه: لا

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

نصائح أخرى

عندما تحتاجها، فإن المشغل القصير لا يقدر بثمن. ومع ذلك، أعتقد أن هناك طرق أفضل في كثير من الأحيان للتعبير عن نفسك. في المثال الذي قدمته، لماذا لا تستخدم سلسلة تنسيق ستفعل بالضبط ما تريد: "{0:00}_{1:00}_{2}_{3}.xls", ، مما يسمح لك بتبسيط التعليمات البرمجية بشكل كبير؟

إذا كنت تريد أن تجعله قريبا، فيمكنك دائما إدراك المكالمات إلى GetCurrentMonth ()، ومكالمات GetCurrenyear يوم GetCurrentday ....

المثال لديك هو إساءة استخدام المشغل الشرطي,

يمكن التعبير عنها بشكل أكثر وضوحا بهذه الطريقة:

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

أجد المشغل الشرطي مفيدا للغاية واستخدامه في كثير من الأحيان. عند استخدامه بشكل صحيح، يمكن أن يساعد في تبسيط التعليمات البرمجية بجعله أكثر إيجازا.

بشكل عام، سوف أتجنب تسلسل مشروطا متعددة في نفس العبارة، بسرعة يحصل عليها جدا مربكة، مما أدى إلى رمز لا يمكن الحفاظ عليه.

أجد أيضا؟ مفيد جدا وغالبا ما يجد التغرير يمكن استبداله بسهولة به ؟؟.

علي سبيل المثال:

a == null? "empty" : a

يمكن استبداله ب:

a ?? "empty"

يقول كتاب الهزلي الرجل. "أسوأ استخدام مشغل ثغر من أي وقت مضى."

قد يتم تحقيق قابلية الاستحقاج من خلال استخدام المسافة البادئة ومسافة البضجة، كما قال ديف، تعليقات.

حكمي الشخصية هو أنه إذا كان من الواضح بشكل صارخ ما يفعله الثغر، فلا بأس. إذا كانت مكتظة في سطر واحد فقط حتى يتمكن المبرمجون من استخدام ثغر، فيجب أن يكون عبارة قائمة إذا.

أنا استخدمها فقط لبساطة إذا كانت البيانات، اثنان على الأكثر. أي أكثر من ذلك وأفضل كتابة ذلك على الطريق الطويل بدلا من أن يبدو وكأنه ما نشرته. ثم مرة أخرى، أحاول ألا يكون لديك أكثر من مستويين متداخنتين إذا كانت البيانات في المقام الأول، لذلك لا تأتي حقا.

أنا جميعا لاستخدام المشغل الشرطي ولكنك لا تحتاج إليها هنا ...

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

أنا حقا لا أحب الطريقة التي استخدمتها. أستخدمها عندما أستطيع بسهولة تناسبها على سطر واحد بدلا من استخدام عبارة Multiline.

أنا أحب المشغل العالي. إنها مجرد مشكلة عندما تكون غير معتاد على التدوين. من الصعب في بعض الأحيان العثور على وثائق حول المشغل الوحيد، ولكن إذا تم استخدامها بشكل أكبر في الوثائق والكتب وأعتقد أنها ستكسب أكثر من ذلك بكثير.

عند إلقاء نظرة على العالم "الوظيفية"، حيث لا يمكنك "القيام بالأشياء المشروطة، يكون المشغل الشرطي شائع جدا. بطريقة أو بأخرى، لدي انطباع بأن النموذج الوظيفي يكتسب اهتماما، لأنه يستغرق تدفق الرقابة الزمنية الناجمة عن البيانات "إذا (هذا) dothis آخر dothat". يجعل الأمر يسهل حقا حدد ما تقصد بدلا من إخبار الكمبيوتر بما يجب القيام به.

قابلية القراءة هي مشكلة واحدة، رغم ذلك، في لغات لا تدعم هذا بالكامل.

الهياف هو آخر: في مثل C ++، لا يمكنك وضع نقطة توقف واحدة فقط من الفروع.

أنا لا أحب المشغل القصير على الإطلاق - إنه غير قابل للقراءة للغاية وأصبح غاضبا حقا عندما أفعل bugfixes والعثور على أشياء من هذا القبيل.

قم بتعليق التعليمات البرمجية الخاصة بك إذا كنت قلقا بشأن قابلية القراءة، وإلا لا أرى أي سبب لعدم استخدامه.

بعض الأقواس تساعد على قدر القراءة بشكل واضح.

النظر في إضافة لهم للمساعدة في توضيح بالضبط ما يفعله مشغل التناوب الخاص بك، ويجب أن تكون على ما يرام. :)

لماذا لا تفعل شيئا أكثر مثل هذا؟

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");
    }
}

لاحظ أنني لم أغير الرمز على الإطلاق، فقط التنسيق. كما لوحظ، لا تحتاج إلى استخدام المشغل الشرطي هنا، ولكن القليل من الرعاية مع المسافة البادئة الخاصة بك يمكن أن تحسن قابلية القراءة بشكل كبير. أحب المشغل المشروط، ولكن إذا قمت بتشغيل جميع التعليمات البرمجية الخاصة بك معا في كتلة كثيفة دون المسافة البادئة، فستكون غير قابلة للقراءة بغض النظر عن المشغلين الذين تستخدمهم.

يطلق عليه مشغل Ternary (نحن لا نسمي الرمز الثنائي ال الرمز الثانوي, ، بعد كل شيء)، وقد سئل من قبل:

هل هذا لاستخدام معقول للمشغل القصير؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top