Sobes.tech
Junior

Оё метавон дар Java дар сохтори switch сатрҳоро истифода бурд?

sobes.tech AI

Ҷавоб аз AI

Бале. Аз Java 7, дар сохтори switch метавон объектҳои навъи String-ро истифода бурд.

// Мисоли истифодаи сатрҳо дар switch
String status = "ACTIVE";
switch (status) {
    case "ACTIVE":
        System.out.println("Ҳолат: Фаъол");
        break;
    case "PENDING":
        System.out.println("Ҳолат: Дар интизорӣ");
        break;
    case "DELETED":
        System.out.println("Ҳолат: Баъд аз тоза");
        break;
    default:
        System.out.println("Ҳолати ношинохта");
}

Мавқеъҳои муҳим дар истифодаи сатрҳо дар switch:

  • Муқоиса кардани сатрҳо бо истифода аз методи equals(), ки камтар самаранок аст, нисбат ба муқоиса кардани намудҳои primitives.
  • Агар сатр дар case ё арзиш дар switch баробар бо null бошад, хатогӣ NullPointerException ба вуҷуд меояд. Ин ҳолатҳоро бояд ё пеш аз switch ё дар блоки default баррасӣ кард.
  • Сатрҳо дар case бояд дар вақти компилятсия константа бошанд.
  • Ҳарфҳои ҳарфӣ муҳим аст. "Active" баробар бо "active" нест.

Альтернативҳои истифодаи сатрҳо дар switch:

  • if-else if: Интихоби равзанаи равшантарин.
  • Enum: Роҳи беҳтарин барои маҷмӯи маҳдуд ва муайяншудаи арзишҳо. Таъмини бехатарии навъ ва идоракунии беҳтар.
// Мисоли истифодаи enum
public enum Status {
    ACTIVE, PENDING, DELETED
}

// ...

Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
    case ACTIVE:
        System.out.println("Ҳолат: Фаъол");
        break;
    case PENDING:
        System.out.println("Ҳолат: Дар интизорӣ");
        break;
    case DELETED:
        System.out.println("Ҳолат: Баъд аз тоза");
        break;
    default:
        System.out.println("Ҳолати ношинохта"); // одатан дар бо enum лозим нест
}
  • Map: Мумкин аст, агар мувофиқат байни сатр ва амалҳо бештар динамикӣ ё калон бошад.
// Мисоли истифодаи Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Ҳолат: Фаъол"));
actions.put("PENDING", () -> System.out.println("Ҳолат: Дар интизорӣ"));
actions.put("DELETED", () -> System.out.println("Ҳолат: Баъд аз тоза"));

// ...

String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Ҳолати ношинохта")).run();

Интихоб байни ин равишҳо ба вазифаи мушаххас, хонданӣ будани коди ва ниёз ба бехатарии навъ вобаста аст. Барои маҷмӯи маҳдуд ва муқаррарии арзишҳои сатрӣ, enum одатан беҳтарин қарор аст.