JAVAPRO_IR Telegram 4089
📌 آشنایی با انواع Scope در زبان Java

در زبان برنامه‌نویسی 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();
}
}



tgoop.com/javapro_ir/4089
Create:
Last Update:

📌 آشنایی با انواع Scope در زبان Java

در زبان برنامه‌نویسی 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();
}
}

BY آموزش برنامه نویسی جاوا | Java


Share with your friend now:
tgoop.com/javapro_ir/4089

View MORE
Open in Telegram


Telegram News

Date: |

Co-founder of NFT renting protocol Rentable World emiliano.eth shared the group Tuesday morning on Twitter, calling out the "degenerate" community, or crypto obsessives that engage in high-risk trading. Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp. Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group.
from us


Telegram آموزش برنامه نویسی جاوا | Java
FROM American