JAVAPRO_IR Telegram 4572
✳️ موضوع: Pattern Matching در switch — ویژگی قدرتمند از جاوا 17 به بعد

در نسخه‌های جدید جاوا، یکی از تغییرات مهم و زیبا، اضافه شدن Pattern Matching در عبارت‌های switch است. این ویژگی باعث می‌شود کدهای شرطی ما خواناتر، کوتاه‌تر و ایمن‌تر از نظر نوع داده (Type-Safe) شوند.


🔹 ۱. مشکل در نسخه‌های قدیمی‌تر
در نسخه‌های قدیمی جاوا، وقتی از switch استفاده می‌کردیم، فقط نوع‌های ساده مانند int, String یا enum پشتیبانی می‌شدند.
برای بررسی نوع (type) یک شیء، مجبور بودیم از instanceof استفاده کنیم و سپس آن را cast کنیم:

static String format(Object obj) {
    if (obj instanceof Integer) {
        Integer i = (Integer) obj;
        return "Integer: " + i;
    } else if (obj instanceof String) {
        String s = (String) obj;
        return "String: " + s;
    } else {
        return "Unknown Type";
    }
}


کد بالا تکراری و مستعد خطاست. جاوا 17 با اضافه کردن Pattern Matching در switch این مشکل را به شکلی ظریف و هوشمند حل کرد.


🔹 ۲. Pattern Matching در switch — نسخه‌ی جدید و تمیزتر

در نسخه‌های جدید، می‌توانیم مستقیماً نوع متغیر را در case تعریف کنیم، بدون نیاز به casting دستی:

static String format(Object obj) {
    return switch (obj) {
        case Integer i -> "Integer: " + i;
        case String s -> "String: " + s.toUpperCase();
        case null -> "Null value detected!";
        default -> "Unknown Type";
    };
}


📍 توضیح:

* در case Integer i، اگر نوع ورودی Integer باشد، به‌صورت خودکار متغیر i ساخته می‌شود.
* نیازی به instanceof یا cast دستی نیست.
* مقدار بازگشتی با فلش -> تعریف می‌شود و در یک خط قابل نوشتن است.


🔹 ۳. مثال کامل از کاربرد عملی

public class PatternMatchingSwitch {
    public static void main(String[] args) {
        System.out.println(describe(42));
        System.out.println(describe("Saleh"));
        System.out.println(describe(3.14));
        System.out.println(describe(null));
    }

    static String describe(Object obj) {
        return switch (obj) {
            case Integer i -> "Integer number: " + i;
            case String s when s.length() > 5 -> "Long String: " + s;
            case String s -> "Short String: " + s;
            case Double d -> "Double number: " + d;
            case null -> "Null value!";
            default -> "Unknown type";
        };
    }
}


📍 خروجی برنامه:
Integer number: 42
Long String: Saleh
Double number: 3.14
Null value!

🔹 ۴. ویژگی جالب – استفاده از شرط اضافی (when clause)
عبارت when در جاوا 21 به switch اضافه شد و به شما اجازه می‌دهد برای هر case شرط خاصی تعریف کنید.
در مثال بالا، case String s when s.length() > 5 فقط زمانی اجرا می‌شود که مقدار obj رشته‌ای و طول آن بیشتر از ۵ کاراکتر باشد.


🔹 ۵. مزایای Pattern Matching در switch

* حذف کدهای تکراری و نیاز به cast دستی
* افزایش ایمنی نوع داده‌ها (Type Safety)
* افزایش خوانایی و سادگی کد
* امکان ترکیب شرط‌ها با when برای کنترل دقیق‌تر


🧠 جمع‌بندی:
ویژگی Pattern Matching در switch یکی از گام‌های بزرگ جاوا به سمت کدنویسی تابعی‌تر و خواناتر است.
این قابلیت نه‌تنها از نظر ظاهری زیباتر است، بلکه خطاهای احتمالی ناشی از تبدیل نوع را نیز کاهش می‌دهد.

#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro
👍6



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

✳️ موضوع: Pattern Matching در switch — ویژگی قدرتمند از جاوا 17 به بعد

در نسخه‌های جدید جاوا، یکی از تغییرات مهم و زیبا، اضافه شدن Pattern Matching در عبارت‌های switch است. این ویژگی باعث می‌شود کدهای شرطی ما خواناتر، کوتاه‌تر و ایمن‌تر از نظر نوع داده (Type-Safe) شوند.


🔹 ۱. مشکل در نسخه‌های قدیمی‌تر
در نسخه‌های قدیمی جاوا، وقتی از switch استفاده می‌کردیم، فقط نوع‌های ساده مانند int, String یا enum پشتیبانی می‌شدند.
برای بررسی نوع (type) یک شیء، مجبور بودیم از instanceof استفاده کنیم و سپس آن را cast کنیم:

static String format(Object obj) {
    if (obj instanceof Integer) {
        Integer i = (Integer) obj;
        return "Integer: " + i;
    } else if (obj instanceof String) {
        String s = (String) obj;
        return "String: " + s;
    } else {
        return "Unknown Type";
    }
}


کد بالا تکراری و مستعد خطاست. جاوا 17 با اضافه کردن Pattern Matching در switch این مشکل را به شکلی ظریف و هوشمند حل کرد.


🔹 ۲. Pattern Matching در switch — نسخه‌ی جدید و تمیزتر

در نسخه‌های جدید، می‌توانیم مستقیماً نوع متغیر را در case تعریف کنیم، بدون نیاز به casting دستی:

static String format(Object obj) {
    return switch (obj) {
        case Integer i -> "Integer: " + i;
        case String s -> "String: " + s.toUpperCase();
        case null -> "Null value detected!";
        default -> "Unknown Type";
    };
}


📍 توضیح:

* در case Integer i، اگر نوع ورودی Integer باشد، به‌صورت خودکار متغیر i ساخته می‌شود.
* نیازی به instanceof یا cast دستی نیست.
* مقدار بازگشتی با فلش -> تعریف می‌شود و در یک خط قابل نوشتن است.


🔹 ۳. مثال کامل از کاربرد عملی

public class PatternMatchingSwitch {
    public static void main(String[] args) {
        System.out.println(describe(42));
        System.out.println(describe("Saleh"));
        System.out.println(describe(3.14));
        System.out.println(describe(null));
    }

    static String describe(Object obj) {
        return switch (obj) {
            case Integer i -> "Integer number: " + i;
            case String s when s.length() > 5 -> "Long String: " + s;
            case String s -> "Short String: " + s;
            case Double d -> "Double number: " + d;
            case null -> "Null value!";
            default -> "Unknown type";
        };
    }
}


📍 خروجی برنامه:
Integer number: 42
Long String: Saleh
Double number: 3.14
Null value!

🔹 ۴. ویژگی جالب – استفاده از شرط اضافی (when clause)
عبارت when در جاوا 21 به switch اضافه شد و به شما اجازه می‌دهد برای هر case شرط خاصی تعریف کنید.
در مثال بالا، case String s when s.length() > 5 فقط زمانی اجرا می‌شود که مقدار obj رشته‌ای و طول آن بیشتر از ۵ کاراکتر باشد.


🔹 ۵. مزایای Pattern Matching در switch

* حذف کدهای تکراری و نیاز به cast دستی
* افزایش ایمنی نوع داده‌ها (Type Safety)
* افزایش خوانایی و سادگی کد
* امکان ترکیب شرط‌ها با when برای کنترل دقیق‌تر


🧠 جمع‌بندی:
ویژگی Pattern Matching در switch یکی از گام‌های بزرگ جاوا به سمت کدنویسی تابعی‌تر و خواناتر است.
این قابلیت نه‌تنها از نظر ظاهری زیباتر است، بلکه خطاهای احتمالی ناشی از تبدیل نوع را نیز کاهش می‌دهد.

#کاربرـحرفهـای


🆔 @javapro_ir
🆔 @group_javapro

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


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

View MORE
Open in Telegram


Telegram News

Date: |

But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." How to Create a Private or Public Channel on Telegram? Polls Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. 1What is Telegram Channels?
from us


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