В JavaScript действительно нет встроенной поддержки pattern matching (сопоставления с образцом) на данный момент, но существует несколько альтернативных подходов, которые могут помочь сделать ваш код более читаемым.
1. **Обычные функции**:
Вы можете использовать обычные функции для улучшения читаемости кода. Например, вы можете вынести логику выбора в отдельную функцию:
```javascript
function mapValueToString(val) {
if (val === 0) {
return 'none';
} else if (val > 0) {
return 'up';
} else {
return 'down';
}
}
const val = getVal();
foo(mapValueToString(val));
```
2. **Объект для сопоставления**:
Можно использовать объект для сопоставления значений:
```javascript
function mapValueToString(val) {
const mapping = {
0: 'none',
'positive': 'up',
'negative': 'down'
};
if (val > 0) {
return mapping['positive'];
} else if (val < 0) {
return mapping['negative'];
}
return mapping[0];
}
const val = getVal();
foo(mapValueToString(val));
```
3. **Использование библиотек**:
Существуют библиотеки, которые реализуют функциональность, похожую на pattern matching. Одна из них — это библиотека `ts-pattern`, которая предлагает синтаксис сопоставления:
```javascript
import { match } from 'ts-pattern';
const result = match(val)
.with(0, () => 'none')
.with(Number.NEGATIVE_INFINITY, () => 'down')
.with(Number.POSITIVE_INFINITY, () => 'up')
.run();
foo(result);
```
Имейте в виду, что эта библиотека в основном предназначена для TypeScript, но вы также можете использовать её с JavaScript, если это вам необходимо.
4. **Использование конструкции switch**:
Если у вас есть несколько условий, которые легко можно представить в виде `switch`, это также может быть хорошим вариантом:
```javascript
function mapValueToString(val) {
switch (true) {
case val === 0:
return 'none';
case val > 0:
return 'up';
case val < 0:
return 'down';
}
}
const val = getVal();
foo(mapValueToString(val));
```
Каждый из этих подходов помогает повысить читаемость и поддерживаемость кода по сравнению с тернарными операторами. Выбор подхода зависит от ваших предпочтений и конкретных требований к коду.