ما هي أفكارك حول طريقة خاصة بتطبيق الثوابت؟

StackOverflow https://stackoverflow.com/questions/244191

  •  04-07-2019
  •  | 
  •  

سؤال

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

public void doSomething() {

    final double MIN_INTEREST = 0.0;

    // ...  
}

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

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

المحلول

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

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

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

نصائح أخرى

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

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

<وأ href = "http://www.java-tips.org/java-se-tips/java.lang/how-do-i-declare-a-constant-in-java.html" يختلط = "noreferrer"> http://www.java-tips.org/java-se-tips/java.lang/how-do-i-declare-a-constant-in-java.html

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

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

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

وأنا أقول لهم أنه لا معنى لاستخدام مستوى الطبقة ثابت إذا تم استخدامه في أسلوب واحد ولكني وجدت أكثر من 1 زميل تصر على أن يكون نقله UP. وعادة ما تمتثل لأنني لست قاسيا إلا أنه يؤثر على القراءة و / أو الأداء.

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

public void doSomething() {

  final double MIN_INTEREST = 0.0;

  // ...  
}

ووأعضاء آخرين من أنت كفريق وتوسيع قاعدة الطبقة مع مجموعة كاملة من أساليب والآن الطبقة هي الطبقة العملاقة 500 lines / 50 methods رائعة. تخيل تجربة مهندس الذي يحاول إضافة أسلوب جديد مع ثابت، سيكون لديهم ل1 مسح الطبقة كلها تبحث عن الثوابت التي تتناسب مع احتياجاتهم، 2 نقل ثابت إلى نطاق الطبقة أمل أن هناك أي تعارض مع القائمة رمز و3 أيضا إضافة طريقتهم.

إذا بدلا إضافة كافة الثوابت في نطاق ملف / فئة لتبدأ والمهندسين لديها 1 مكان واحد للبحث عن الثوابت القائمة و، 2 استخلاص بعض الثوابت من الآخرين حيث أنه من المنطقي. (على سبيل المثال إذا كان لديك ثابت لpi قد تحتاج أيضا إلى تعريف ثابت جديدة بقيمة pi/2).

والسبب يمكنك تعريف متغير النهائي على مستوى فئة أو طريقة (المحلي) مستوى انها لأنه يمكنك تجاوز ثابت ثابت العالمي داخل طريقة (المحلي).

مثال:

public class Test {

    final double MIN_INTEREST = 0.0;

    /**
     * @param args
     */
    public static void main(String[] args) {


        Test test = new Test();

        test.doSomethingLocal();
        test.doSomethingGlobal();

    }

    public void doSomethingGlobal() {

        System.out.println("Global-> " + MIN_INTEREST);

    }

    public void doSomethingLocal() {

        final double MIN_INTEREST = 0.1;

        System.out.println("Local-> " + MIN_INTEREST);

    }
}

والناتج سيكون:

Local-> 0.1
Global-> 0.0

وهكذا سؤالك لا يجعل أي معنى.

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