Please open Telegram to view this post
VIEW IN TELEGRAM
با آرزوی موفقیت،
آکادمی جاواپرو
#میکروسرویس #جاوا #java
Please open Telegram to view this post
VIEW IN TELEGRAM
نمونه جلسات رایگان تدریس شده دوره رو در لینک زیر میتونید ببینید. در صفحه دوره به سراغ سرفصل ها بروید و جلساتی که کنارش گزینه پیش نمایش موجود است را می توانید تماشا کنید
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📘 درک متغیرهای محلی (Local) و سراسری (Global) در زبان Java
در زبان Java، متغیرها بسته به محل تعریفشان، دارای محدوده (scope) متفاوتی هستند. متغیرهای محلی فقط در همان محدودهای که تعریف شدهاند قابل استفاده هستند، در حالی که متغیرهای سراسری (که در Java بهصورت *فیلدهای کلاس* تعریف میشوند) میتوانند در کل کلاس مورد استفاده قرار گیرند.
🔹 متغیر محلی (Local Variable):
متغیرهای محلی درون متدها، حلقهها یا بلوکهای شرطی تعریف میشوند و فقط در همان بلوک قابل دسترسی هستند. این متغیرها خارج از آن محدوده وجود ندارند و پس از خروج از بلوک از بین میروند.
🔸 مثال ساده:
🟢 توضیح:
متغیر message فقط در متد printMessage قابل استفاده است. خارج از این متد، این متغیر وجود ندارد.
🔸 مثال پیشرفتهتر:
🟢 توضیح:
* متغیر total فقط در متد calculateSum قابل استفاده است.
* متغیر current در هر دور از حلقه for تعریف میشود و فقط درون همان حلقه قابل دسترسی است.
* متغیر bonus تنها زمانی تعریف و قابل استفاده است که شرط if برقرار باشد، و خارج از بلوک if وجود ندارد.
این طراحی باعث میشود متغیرها در کوتاهترین دامنه ممکن تعریف شوند که کد را امنتر و خواناتر میکند.
🔹 متغیر سراسری (Global Variable یا Class Field):
در Java مفهوم متغیر سراسری به شکل سنتی وجود ندارد، اما میتوان متغیرهایی را در سطح کلاس تعریف کرد که توسط تمام متدهای همان کلاس قابل استفاده باشند. این متغیرها به عنوان *فیلدهای کلاس* شناخته میشوند.
🔸 مثال ساده:
🟢 توضیح:
* متغیر balance در سطح کلاس تعریف شده و در تمام متدهای deposit و withdraw در دسترس است.
* مقدار این متغیر حتی پس از پایان یک متد نیز حفظ میشود چون به شیء تعلق دارد.
🔸 مثال پیشرفتهتر:
🟢 توضیح:
* متغیرهای totalOrders و totalRevenue به کل شیء تعلق دارند و در هر متدی از کلاس قابل استفادهاند.
* متد addOrder این متغیرها را بهروزرسانی میکند، متد resetOrders آنها را ریست میکند، و متد printSummary آنها را چاپ میکند.
* این سبک طراحی برای نگهداری اطلاعات پایدار بین چند متد مناسب است.
در زبان Java، متغیرها بسته به محل تعریفشان، دارای محدوده (scope) متفاوتی هستند. متغیرهای محلی فقط در همان محدودهای که تعریف شدهاند قابل استفاده هستند، در حالی که متغیرهای سراسری (که در Java بهصورت *فیلدهای کلاس* تعریف میشوند) میتوانند در کل کلاس مورد استفاده قرار گیرند.
🔹 متغیر محلی (Local Variable):
متغیرهای محلی درون متدها، حلقهها یا بلوکهای شرطی تعریف میشوند و فقط در همان بلوک قابل دسترسی هستند. این متغیرها خارج از آن محدوده وجود ندارند و پس از خروج از بلوک از بین میروند.
🔸 مثال ساده:
public class Example {
public void printMessage() {
String message = "Hello from inside the method!"; // local variable
System.out.println(message);
}
}
🟢 توضیح:
متغیر message فقط در متد printMessage قابل استفاده است. خارج از این متد، این متغیر وجود ندارد.
🔸 مثال پیشرفتهتر:
public class Calculator {
public void calculateSum(int[] numbers) {
int total = 0; // local variable in method
for (int i = 0; i < numbers.length; i++) {
int current = numbers[i]; // local variable in loop
if (current % 2 == 0) {
int bonus = 2; // local variable in if block
total += current + bonus;
System.out.println("Even number with bonus: " + (current + bonus));
} else {
System.out.println("Odd number: " + current);
}
}
System.out.println("Final total: " + total);
}
}
🟢 توضیح:
* متغیر total فقط در متد calculateSum قابل استفاده است.
* متغیر current در هر دور از حلقه for تعریف میشود و فقط درون همان حلقه قابل دسترسی است.
* متغیر bonus تنها زمانی تعریف و قابل استفاده است که شرط if برقرار باشد، و خارج از بلوک if وجود ندارد.
این طراحی باعث میشود متغیرها در کوتاهترین دامنه ممکن تعریف شوند که کد را امنتر و خواناتر میکند.
🔹 متغیر سراسری (Global Variable یا Class Field):
در Java مفهوم متغیر سراسری به شکل سنتی وجود ندارد، اما میتوان متغیرهایی را در سطح کلاس تعریف کرد که توسط تمام متدهای همان کلاس قابل استفاده باشند. این متغیرها به عنوان *فیلدهای کلاس* شناخته میشوند.
🔸 مثال ساده:
public class BankAccount {
private double balance = 0.0; // global variable (field)
public void deposit(double amount) {
balance += amount;
System.out.println("Balance after deposit: " + balance);
}
public void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
System.out.println("Balance after withdrawal: " + balance);
} else {
System.out.println("Insufficient balance!");
}
}
}
🟢 توضیح:
* متغیر balance در سطح کلاس تعریف شده و در تمام متدهای deposit و withdraw در دسترس است.
* مقدار این متغیر حتی پس از پایان یک متد نیز حفظ میشود چون به شیء تعلق دارد.
🔸 مثال پیشرفتهتر:
public class OrderManager {
private int totalOrders = 0; // global variable (field)
private double totalRevenue = 0.0; // global variable (field)
public void addOrder(double amount) {
totalOrders++;
totalRevenue += amount;
System.out.println("Order added. Total orders: " + totalOrders);
System.out.println("Total revenue: $" + totalRevenue);
}
public void resetOrders() {
totalOrders = 0;
totalRevenue = 0.0;
System.out.println("All orders have been reset.");
}
public void printSummary() {
System.out.println("Order Summary:");
System.out.println("Orders: " + totalOrders + ", Revenue: $" + totalRevenue);
}
}
🟢 توضیح:
* متغیرهای totalOrders و totalRevenue به کل شیء تعلق دارند و در هر متدی از کلاس قابل استفادهاند.
* متد addOrder این متغیرها را بهروزرسانی میکند، متد resetOrders آنها را ریست میکند، و متد printSummary آنها را چاپ میکند.
* این سبک طراحی برای نگهداری اطلاعات پایدار بین چند متد مناسب است.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 آشنایی با انواع Scope در زبان Java
در زبان برنامهنویسی Java، واژهی Scope به محدودهای اشاره دارد که یک متغیر، تابع یا شیء در آن قابل دسترسی و استفاده است. شناخت درست انواع Scope برای جلوگیری از خطاهای منطقی و طراحی ساختار مناسب برنامه بسیار ضروری است. در این پیام، انواع Scope را بهصورت مرحلهای با مثالهای ساده تا پیشرفته بررسی میکنیم.
✅ ۱. Local Scope (محدوده محلی)
متغیرهایی که درون یک متد یا بلاک تعریف میشوند، فقط در همان بلاک قابل استفادهاند و پس از خروج از آن، از بین میروند.
🔹 نکته: متغیر
✅ ۲. Instance Scope (محدودهی شیء یا نمونه)
متغیرهایی که در سطح کلاس و خارج از متدها تعریف میشوند، اما بدون استفاده از کلیدواژه `static`، دارای Instance Scope هستند.
🔹 نکته: برای دسترسی به این متغیرها باید ابتدا یک شیء از کلاس ساخته شود.
✅ ۳. Static Scope (محدوده سراسری در کلاس)
وقتی متغیر یا متدی با
🔹 نکته: متغیر
✅ ۴. Block Scope (محدودهی بلوک کدی)
هر جایی که از
✅ ۵. Method Scope (محدودهی تابع)
پارامترهای ورودی یک متد و متغیرهای تعریفشده درون آن، فقط در همان متد قابل استفادهاند.
🔹 نکته: متغیر
✅ ۶. Nested Scope (محدودههای تو در تو)
در صورت تو در تو بودن بلوکها، بلوک داخلی به متغیرهای بلوک خارجی دسترسی دارد، ولی بالعکس آن صحیح نیست.
✅ ۷. Lambda Scope (محدوده در عبارات لامبدا)
در Java، عبارات Lambda برای تعریف توابع بدون نیاز به ایجاد کلاس جدید استفاده میشوند. درون لامبداها، فقط به متغیرهایی میتوان دسترسی داشت که effectively final باشند؛ یعنی یا صراحتاً
🔹 نکته مهم: اگر مقدار
در زبان برنامهنویسی Java، واژهی Scope به محدودهای اشاره دارد که یک متغیر، تابع یا شیء در آن قابل دسترسی و استفاده است. شناخت درست انواع Scope برای جلوگیری از خطاهای منطقی و طراحی ساختار مناسب برنامه بسیار ضروری است. در این پیام، انواع Scope را بهصورت مرحلهای با مثالهای ساده تا پیشرفته بررسی میکنیم.
✅ ۱. Local Scope (محدوده محلی)
متغیرهایی که درون یک متد یا بلاک تعریف میشوند، فقط در همان بلاک قابل استفادهاند و پس از خروج از آن، از بین میروند.
public class Example {
public static void main(String[] args) {
int x = 10; // x دارای Local Scope است
if (x > 5) {
int y = 20; // y فقط درون این بلوک if معتبر است
System.out.println("y: " + y);
}
// System.out.println(y); // خطا: y شناختهشده نیست
}
}
🔹 نکته: متغیر
y
خارج از بلاک if
وجود ندارد و دسترسی به آن باعث خطای کامپایل میشود.✅ ۲. Instance Scope (محدودهی شیء یا نمونه)
متغیرهایی که در سطح کلاس و خارج از متدها تعریف میشوند، اما بدون استفاده از کلیدواژه `static`، دارای Instance Scope هستند.
public class Person {
String name; // Instance variable
int age;
public void showInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
🔹 نکته: برای دسترسی به این متغیرها باید ابتدا یک شیء از کلاس ساخته شود.
Person p = new Person();
p.name = "Ali";
p.age = 25;
p.showInfo();
✅ ۳. Static Scope (محدوده سراسری در کلاس)
وقتی متغیر یا متدی با
static
تعریف شود، بدون نیاز به ساخت شیء و به صورت مستقیم از طریق نام کلاس قابل دسترسی خواهد بود.
public class Counter {
static int count = 0;
public static void increment() {
count++;
}
}
🔹 نکته: متغیر
count
بین تمام نمونهها مشترک است.
Counter.increment();
System.out.println(Counter.count); // خروجی: 1
✅ ۴. Block Scope (محدودهی بلوک کدی)
هر جایی که از
{}
استفاده شده باشد، مانند if
, for
, while
, و حتی یک بلوک ساده، میتواند محدودهی خاصی تعریف کند.
public class BlockScope {
public static void main(String[] args) {
{
int temp = 42;
System.out.println(temp);
}
// System.out.println(temp); // خطا: temp خارج از محدوده است
}
}
✅ ۵. Method Scope (محدودهی تابع)
پارامترهای ورودی یک متد و متغیرهای تعریفشده درون آن، فقط در همان متد قابل استفادهاند.
public class Calculator {
public int add(int a, int b) {
int result = a + b;
return result;
}
}
🔹 نکته: متغیر
result
فقط در متد add
وجود دارد و از بیرون آن قابل دسترسی نیست.✅ ۶. Nested Scope (محدودههای تو در تو)
در صورت تو در تو بودن بلوکها، بلوک داخلی به متغیرهای بلوک خارجی دسترسی دارد، ولی بالعکس آن صحیح نیست.
public class NestedScope {
public static void main(String[] args) {
int outer = 100;
{
int inner = 50;
System.out.println("outer: " + outer); // مجاز
System.out.println("inner: " + inner);
}
// System.out.println(inner); // خطا
}
}
✅ ۷. Lambda Scope (محدوده در عبارات لامبدا)
در Java، عبارات Lambda برای تعریف توابع بدون نیاز به ایجاد کلاس جدید استفاده میشوند. درون لامبداها، فقط به متغیرهایی میتوان دسترسی داشت که effectively final باشند؛ یعنی یا صراحتاً
final
تعریف شده باشند، یا بعد از مقداردهی، دیگر تغییر نکنند.
public class LambdaScopeExample {
public static void main(String[] args) {
String message = "Hello"; // این متغیر بعداً تغییر نکند
Runnable r = () -> {
System.out.println(message); // مجاز است
};
r.run();
}
}
🔹 نکته مهم: اگر مقدار
message
را بعد از لامبدا تغییر دهیم، کامپایلر خطا میدهد:
public class LambdaScopeError {
public static void main(String[] args) {
String msg = "Hi";
Runnable r = () -> {
System.out.println(msg);
};
msg = "Hello"; // ❌ خطا: msg باید final یا effectively final باشد
r.run();
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM