JavaRush /وبلاگ جاوا /Random-FA /متغیرهای جهانی در جاوا: چه زمانی از آنها استفاده کنیم؟
Анзор Кармов
مرحله
Санкт-Петербург

متغیرهای جهانی در جاوا: چه زمانی از آنها استفاده کنیم؟

در گروه منتشر شد
سلام! در این مقاله در مورد متغیرهای سراسری، اعلان آنها و نمونه هایی از کاربرد مناسب صحبت خواهیم کرد. یک نکته کوچک: ما متغیرهای کلاس جهانی را در نظر نخواهیم گرفت، یعنی آنهایی که در هر کلاس قابل دسترسی هستند. ما در مورد متغیرهای سراسری کل برنامه صحبت خواهیم کرد - آنهایی که در کل برنامه قابل دسترسی هستند. متغیرهای جهانی در جاوا: چه زمانی از آنها استفاده کنیم؟  - 1

نحوه ایجاد متغیرهای سراسری

متغیرهای سراسری متغیرهایی هستند که از هر جایی در برنامه قابل دسترسی هستند. به عبارت دیگر، دامنه آنها کل کاربرد است. برای ایجاد چنین متغیری در جاوا، باید یک متغیر استاتیک عمومی در یک کلاس عمومی ایجاد کنید:
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
متغیرهای aو b- strجهانی شده اند. ما می توانیم مستقیماً از کلاس های دیگر داخل برنامه به آنها دسترسی داشته باشیم:
public class GlobalVarsDemo {
    public static void main(String[] args) {
        Example.a = 4;
        Example.b = 5;
        Example.str = "Global String variable value";

        System.out.println(Example.a);
        System.out.println(Example.b);
        System.out.println(Example.str);
    }
}
اگر متد را اجرا کنیم main، خروجی زیر را خواهیم دید:

4
5
Global String variable value
متغیرهای جهانی را می توان به 2 نوع تقسیم کرد:
  • متغیرهای قابل ویرایش؛
  • متغیرهایی که فقط قابل خواندن هستند.
دومی ثابت جهانی نامیده می شود. برای ایجاد یک ثابت جهانی، باید یک متغیر بسازید finalو هنگام تعریف متغیر، یک مقدار به آن اختصاص دهید:
public class Constants {

    public static final double PI = 3.1415926535897932384626433832795;
    public static final String HELLO_WORLD_STR = "Hello, World!";

}
طبق قرارداد نامگذاری جاوا، همه ثابت ها باید با حروف بزرگ نامگذاری شوند و کلمات را با یک کاراکتر زیر خط جدا کنند. بنابراین، ما ثابت ها را ایجاد کرده ایم، و اکنون نمی توانیم مقادیر آنها را تغییر دهیم: متغیرهای جهانی در جاوا: چه زمانی از آنها استفاده کنیم؟  - 2با این حال، می توانیم مقادیر آنها را بخوانیم:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
نتیجه:

Hello, World!
public class ConstantsDemo {
    public static void main(String[] args) {
        double r = 10;
        String message = String.format("Площадь круга с радиусом %f=%f", r, getCircleSquare(r));
        System.out.println(message);

    }

    static double getCircleSquare(double r) {
        return Constants.PI * r * r;
    }
}
نتیجه:

Площадь круга с радиусом 10,000000=314,159265

آیا باید از متغیرهای سراسری استفاده کرد؟

مقالات زیادی در اینترنت وجود دارد که پیام اصلی آنها این است: متغیرهای جهانی شیطانی، بد و وحشتناک هستند. آیا واقعا؟ بیایید سعی کنیم جوانب مثبت و منفی متغیرهای جهانی را ارائه دهیم تا هرکس بتواند نتیجه گیری خود را بگیرد. متغیرهای جهانی در جاوا: چه زمانی از آنها استفاده کنیم؟  - 3بیایید با معایب شروع کنیم. بیایید برنامه ای را تصور کنیم که دارای یک کلاس با متغیرهای سراسری است که قابل خواندن و ویرایش است. با گذشت زمان، تعداد کلاس‌های پروژه، تعداد متغیرهای سراسری و روش‌هایی که از متغیرهای سراسری یا به عبارتی وابسته به آن‌ها استفاده می‌کنند، افزایش می‌یابد. با گذشت زمان، هر متغیر سراسری در قسمت های مختلف سیستم برای اهداف مختلف خوانده می شود. مقدار یک متغیر را می توان در قسمت های مختلف سیستم به روز کرد. تصویر کلی از دنیای این برنامه به طور قابل توجهی پیچیده تر می شود و این منجر به معایب زیر می شود :
  1. کاهش خوانایی و افزایش مشکل در درک کد.
  2. افزایش پیچیدگی نگهداری کد
  3. برای تغییر یک متغیر سراسری، لازم است کل کد را آنالیز کنید تا متغیر را روی مقداری تنظیم نکنید که برای سایر قسمت‌های سیستم نامعتبر است.
  4. افزایش خطاهایی که اشکال زدایی آنها بسیار دشوار است.

    بیایید یک متغیر سراسری، آرایه ای از اشیا را تصور کنیم. به عنوان مثال، در یک قسمت از سیستم، رشته ها در این آرایه مورد انتظار است و در قسمت دیگری از سیستم، شخصی تصمیم گرفت از اعداد ممیز شناور استفاده کند. بعید است که کسی بخواهد این را بفهمد.

  5. اگر از متغیرهای سراسری در کد خود و همچنین برخی از کتابخانه ها که به نوبه خود از متغیرهای سراسری نیز استفاده می کنند، استفاده کنید، ممکن است نام متغیرها یکسان باشد. این می تواند منجر به خطا در سمت برنامه شما و در سمت کتابخانه ای شود که استفاده می کنید.
  6. اتصال بین بخش های مختلف سیستم که از متغیرهای سراسری استفاده می کنند را افزایش می دهد. برعکس، شما باید برای اتصال آزاد کد تلاش کنید. بهتر است بسیاری از زیرسیستم‌های کوچک به طور آزاد به یکدیگر متصل باشند تا یک چیز سنگین. زیرا مقابله با چندین چیز ساده برای مغز آسانتر از یک چیز بسیار پیچیده و گیج کننده است.
  7. نوشتن آزمون‌های واحد دشوارتر می‌شود، زیرا آزمون نمی‌داند به کدام متغیرهای سراسری نیاز است و چگونه باید مقداردهی اولیه شوند.
  8. در برنامه های چند رشته ای، استفاده از متغیرهای سراسری توسط رشته های مختلف منجر به افزایش خطاهایی می شود که اشکال زدایی آنها دشوار است و پیچیدگی پروژه را افزایش می دهد. به همین دلیل، لازم است دسترسی به چنین متغیرهایی را به درستی پیکربندی کنید و آنها را با همگام سازی و قفل تجهیز کنید. این ممکن است در آینده منجر به اتصال کوتاه شود. به عنوان مثال، رشته A متغیر X را برای کار خود قفل کرده است، و رشته B متغیر Y را برای کار خود قفل کرده است، و رشته A اکنون به متغیر Y نیاز دارد، و رشته B به متغیر X نیاز دارد. در نتیجه، برنامه مسدود می شود.
اما این همه نادرست است. این توصیفی از خطرات است که با رشد پروژه و افزایش تعداد متغیرهای جهانی در آن، احتمال آن افزایش می‌یابد. بیایید به سمت جوانب مثبت برویم :
  1. در پروژه های کوچک، متغیرهای سراسری ساده ترین چیز برای انجام پروژه هستند.
  2. گاهی اوقات ترس از استفاده از متغیرهای سراسری منجر به پیچیدگی بیشتر پروژه می شود. سپس برنامه نویسان شروع به ایجاد تک تک و متوسل شدن به الگوهای طراحی دیگر می کنند.
  3. در برنامه نویسی، اغلب باید به برخی از مقادیر تغییرناپذیر تکیه کنید.

    معقول ترین چیز این است که چنین مقادیری را به عنوان یک ثابت بنویسیم، زیرا فقط ثابت ها تضمین می کنند که مقدار یک متغیر در طول زمان تغییر نمی کند. چنین ثابت هایی را می توان همیشه یافت ( ،،، Integer.MAX_VALUEو غیره ). اما برنامه نویسی به استفاده از کتابخانه های استاندارد محدود نمی شود. اغلب اتفاق می افتد که شما نیاز به نوشتن نوعی منطق منحصر به فرد دارید، که نیاز به تکیه بر ثابت های منحصر به فرد خود دارد. به همین دلیل است که گاهی اوقات استفاده از ثابت ها (متغیرهای سراسری فقط خواندنی) واقعا زندگی را آسان می کند.Integer.MIN_VALUEBoolean.TRUECollections.EMPTY_LIST

به طور کلی نباید بیش از حد از متغیرهای سراسری استفاده کنید، در صورت امکان فقط از ثابت ها استفاده کنید. قبلا گفته شد که استفاده از متغیرهای سراسری در پروژه های کوچک بد نیست. اما بهتر است یک توسعه دهنده مبتدی اصلا از آنها استفاده نکند. به دو دلیل:
  1. هر چیزی که یک توسعه دهنده تازه کار می نویسد اساسا یک پروژه کوچک است. و استفاده از متغیرهای جهانی در پروژه های خود به او یاد می دهد که از متغیرهای جهانی در همه جا استفاده کند.
  2. بهتر است ابتدا یاد بگیرید که بدون "ترفندهای ممنوعه" انجام دهید. و با تجربه، درک اینکه چه زمانی استفاده از چنین تکنیک هایی مناسب است، خود به خود به دست خواهد آمد.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION