بررسی قدرت تطبیق الگو با سوئیچ در جاوا 21
Summarize this content to 400 words in Persian Lang یکی از موارد استفاده رایج برای تطبیق الگو با سوئیچ، هنگام کار با انواع مختلف داده در یک برنامه است. مثال زیر از یک کلاس WeatherStation را در نظر بگیرید که دارای انواع مختلفی از سنسورها است و دمای فعلی را برمی گرداند:
`کلاس عمومی ایستگاه هواشناسی {
private Sensor sensor;
public double getCurrentTemperature() {
return switch (sensor) {
case TemperatureSensor t -> t.reading();
case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction
default -> 0.0; // in case of an unhandled sensor type, return 0
};
}
}
`
در اینجا، میتوانیم ببینیم که یک رابط Sensor برای عبارت انتخابگر استفاده میشود، و برچسبهای مورد از الگوهایی بر اساس پیادهسازیهای خاص سنسور استفاده میکنند: TemperatureSensor و HumiditySensor. این اجازه می دهد تا روشی مختصر و قابل خواندن برای مدیریت انواع مختلف داده ها در دستور سوئیچ وجود داشته باشد.
یکی دیگر از موارد استفاده برای تطبیق الگو با سوئیچ، زمانی است که با enums سروکار داریم. قبل از معرفی تطبیق الگو، enums فقط میتوانست بهعنوان ثابت در برچسبهای حروف مورد استفاده قرار گیرد و مقادیری را که میتوان با آنها در یک دستور سوئیچ آزمایش کرد، محدود کرد. با ویژگی جدید، enums اکنون میتواند در برچسبهای حروف مناسب باشد که امکان تطبیق دقیقتر و انعطافپذیرتر را فراهم میکند.
public enum Direction {
NORTH,
EAST,
SOUTH,
WEST
}
public void move(Direction direction) {
switch (direction) {
case NORTH,NORTH_WEST,NORTH_EAST -> moveUp();
case EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
case SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
case WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}
در اینجا، متد move() از یک دستور switch استفاده می کند تا به راحتی حرکت در جهات مختلف را بر اساس مقدار جهت enum مشخص شده کنترل کند. با تطبیق الگو، ما همچنین میتوانیم ترکیبهای جهتدار، مانند NORTH_WEST و EAST_SOUTH را مشخص کنیم، که کد ما را قویتر و انعطافپذیرتر میکند.
در نهایت، بیایید به مثالی نگاه کنیم که چگونه تطبیق الگو می تواند به مدیریت خطا در دستور سوئیچ کمک کند. در سوئیچ سنتی، اگر عبارت انتخابگر با هیچ یک از برچسب های case مطابقت نداشته باشد، می توان از یک case پیش فرض برای رسیدگی به خطا استفاده کرد. با این حال، این ممکن است در هنگام برخورد با برچسبهای مورد متعدد خستهکننده باشد و منجر به تکرار کد شود. در تطبیق الگو، در صورتی که هیچ یک از الگوهای برچسب حروف با عبارت انتخابگر مطابقت نداشته باشد، یک استثنا ایجاد میشود و مدیریت خطا را یکنواختتر و کمتر مستعد خطا میکند.
public String getPlanetaryObject(PlanetaryBody body) {
return switch (body) {
case Planet p && p.getMass() > 1e29 -> p.getName() + ” is a gas giant”;
case Planet p && p.getMass() > 1e23 -> p.getName() + ” is a rocky planet”;
case Star s && s.getLuminosity() > 1e32 -> s.getName() + ” is a bright star”;
case Star s && s.getLuminosity() < 1e28 -> s.getName() + ” is a dim star”;
default -> throw new MatchException(“Unable to determine type of planetary object: ” + body.getName());
};
}
در این مثال، متد getPlanetaryObject() یک جسم PlanetaryBody را می گیرد که می تواند سیاره یا ستاره باشد. الگوهای مورد استفاده در برچسبهای قاب، شرایط اضافی مانند جرم سیاره یا درخشندگی ستاره را در نظر میگیرند. اگر هیچ یک از الگوها مطابقت نداشته باشد، MatchException پرتاب می شود، که مدیریت خطا را سازگارتر می کند و از هرگونه خطای احتمالی جلوگیری می کند.
نتیجه گیری
تطبیق الگو برای سوئیچ یکی از مهم ترین ویژگی هایی است که در زمان های اخیر در جاوا معرفی شده است. این امکان را برای ساختارهای کنترل جریان انعطاف پذیرتر و مختصرتر فراهم می کند.
مهارت های جاوا خود را با دریافت گواهینامه برنامه نویس حرفه ای Java SE 21 ارتقا دهید.
یکی از موارد استفاده رایج برای تطبیق الگو با سوئیچ، هنگام کار با انواع مختلف داده در یک برنامه است. مثال زیر از یک کلاس WeatherStation را در نظر بگیرید که دارای انواع مختلفی از سنسورها است و دمای فعلی را برمی گرداند:
`کلاس عمومی ایستگاه هواشناسی {
private Sensor sensor;
public double getCurrentTemperature() {
return switch (sensor) {
case TemperatureSensor t -> t.reading();
case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction
default -> 0.0; // in case of an unhandled sensor type, return 0
};
}
}
`
در اینجا، میتوانیم ببینیم که یک رابط Sensor برای عبارت انتخابگر استفاده میشود، و برچسبهای مورد از الگوهایی بر اساس پیادهسازیهای خاص سنسور استفاده میکنند: TemperatureSensor و HumiditySensor. این اجازه می دهد تا روشی مختصر و قابل خواندن برای مدیریت انواع مختلف داده ها در دستور سوئیچ وجود داشته باشد.
یکی دیگر از موارد استفاده برای تطبیق الگو با سوئیچ، زمانی است که با enums سروکار داریم. قبل از معرفی تطبیق الگو، enums فقط میتوانست بهعنوان ثابت در برچسبهای حروف مورد استفاده قرار گیرد و مقادیری را که میتوان با آنها در یک دستور سوئیچ آزمایش کرد، محدود کرد. با ویژگی جدید، enums اکنون میتواند در برچسبهای حروف مناسب باشد که امکان تطبیق دقیقتر و انعطافپذیرتر را فراهم میکند.
public enum Direction {
NORTH,
EAST,
SOUTH,
WEST
}
public void move(Direction direction) {
switch (direction) {
case NORTH,NORTH_WEST,NORTH_EAST -> moveUp();
case EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
case SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
case WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}
در اینجا، متد move() از یک دستور switch استفاده می کند تا به راحتی حرکت در جهات مختلف را بر اساس مقدار جهت enum مشخص شده کنترل کند. با تطبیق الگو، ما همچنین میتوانیم ترکیبهای جهتدار، مانند NORTH_WEST و EAST_SOUTH را مشخص کنیم، که کد ما را قویتر و انعطافپذیرتر میکند.
در نهایت، بیایید به مثالی نگاه کنیم که چگونه تطبیق الگو می تواند به مدیریت خطا در دستور سوئیچ کمک کند. در سوئیچ سنتی، اگر عبارت انتخابگر با هیچ یک از برچسب های case مطابقت نداشته باشد، می توان از یک case پیش فرض برای رسیدگی به خطا استفاده کرد. با این حال، این ممکن است در هنگام برخورد با برچسبهای مورد متعدد خستهکننده باشد و منجر به تکرار کد شود. در تطبیق الگو، در صورتی که هیچ یک از الگوهای برچسب حروف با عبارت انتخابگر مطابقت نداشته باشد، یک استثنا ایجاد میشود و مدیریت خطا را یکنواختتر و کمتر مستعد خطا میکند.
public String getPlanetaryObject(PlanetaryBody body) {
return switch (body) {
case Planet p && p.getMass() > 1e29 -> p.getName() + " is a gas giant";
case Planet p && p.getMass() > 1e23 -> p.getName() + " is a rocky planet";
case Star s && s.getLuminosity() > 1e32 -> s.getName() + " is a bright star";
case Star s && s.getLuminosity() < 1e28 -> s.getName() + " is a dim star";
default -> throw new MatchException("Unable to determine type of planetary object: " + body.getName());
};
}
در این مثال، متد getPlanetaryObject() یک جسم PlanetaryBody را می گیرد که می تواند سیاره یا ستاره باشد. الگوهای مورد استفاده در برچسبهای قاب، شرایط اضافی مانند جرم سیاره یا درخشندگی ستاره را در نظر میگیرند. اگر هیچ یک از الگوها مطابقت نداشته باشد، MatchException پرتاب می شود، که مدیریت خطا را سازگارتر می کند و از هرگونه خطای احتمالی جلوگیری می کند.
نتیجه گیری
تطبیق الگو برای سوئیچ یکی از مهم ترین ویژگی هایی است که در زمان های اخیر در جاوا معرفی شده است. این امکان را برای ساختارهای کنترل جریان انعطاف پذیرتر و مختصرتر فراهم می کند.
مهارت های جاوا خود را با دریافت گواهینامه برنامه نویس حرفه ای Java SE 21 ارتقا دهید.