Как написать суперчитаемый код
В прошлый раз, когда я написал статью 7 Bad Code Smells In Typescript
, она получила много внимания и похвалы. Поэтому я думаю, что многие хотят узнать об этом больше и я решил написать об этом еще одну статью.
В этой статье я не буду повторять предыдущие плохие запахи кода. Сегодня мы обсудим еще 5 концепций чистого кода в Typescript.
1. Функции должны делать одну вещь
Если функции выполняют несколько функций, их сложнее изменить, протестировать и реорганизовать.
Плохая практика:
function updateDeprecatedDependencies(dependicies: Dependency[]) { dependicies.forEach((dependency) => { const dependencyVersion = getDependencyVersion(dependency); if (dependencyVersion.isDeprecated()) { upgradeDependency(dependency); } }) }
Сделайте это вместо этого:
function updateDeprecatedDependencies(dependicies: Dependency[]) { dependicies.filter(isDeprecatedDependency).forEach(upgradeDependency); } function isDeprecatedDependency(dependency: Dependency) { const dependencyVersion = getDependencyVersion(dependency); return dependencyVersion.isDeprecated(); }
2. Используйте enum для документирования намерения
Перечисления могут помочь вам задокументировать цель вашего кода.
Плохая практика:
const MOBILE_OS= { ANDROID: 'android', IOS: 'iOS', } reactNative.run(MOBILE_OS.ANDROID); class ReactNative { // declaration of React Native run(mobileOS) { switch (mobileOS) { case MOBILE.ANDROID: // some logic to be executed case MOBILE.IOS: // some logic to be executed } } }
Сделайте это вместо этого:
enum MOBILE_OS { ANDROID, IOS, } reactNative.run(MOBILE_OS.ANDROID); class ReactNative { // declaration of ReactNative run(mobileOS) { switch (mobileOS) { case MOBILE.ANDROID: // some logic to be executed case MOBILE.IOS: // some logic to be executed } } }
3. Не игнорируйте пойманные ошибки
Если вы заключаете свой код в try/catch, это означает, что вы думаете, что может быть ошибка, и поэтому вы должны зарегистрировать или что-то сделать с ошибкой.
Плохая практика:
try { functionThatMightThrow(); } catch (error) { console.log(error); } // or even worse try { functionThatMightThrow(); } catch (error) { // ignore error }
Сделайте это вместо этого:
import { logger } from './logging' try { functionThatMightThrow(); } catch (error) { logger.log(error); }
4. Удалите неиспользуемый код
Если у вас есть неиспользуемый код, избавьтесь от него! Он будет сохранен в вашей истории версий, если он вам все еще нужен.
function unusedFunction(param: string) { // ... } function newFunction(param: string) { // ... } const result = newFunction();
Сделайте это вместо этого:
function newFunction(param: string) { // ... } const result = newFunction();
5. тип и интерфейс
Используйте type
, если вам нужен union
или intersection
. Используйте interface
, если вам нужно extends
или implements
.
Если вам интересно, вы можете прочитать больше Interfaces vs Types
.
Плохая практика:
interface FrontendConfig { // ... } interface BackendConfig { // ... } interface Config { // ... } //... type Settings = { // ... }
Сделайте это вместо этого:
type FrontendConfig = { // ... } type BackendConfig = { // ... } type Config = FrontendConfig | BackendConfig; // ... interface Settings { // ... } class FrontendSettings implements Settings { // ... } class BackendSettings implements Settings { // ... }
Заключение
О чистом коде можно говорить много, одной статьи мало. Если вам интересно, вы также можете прочитать больше 7 Bad Code Smells In Typescript
.
Спасибо за прочтение, надеюсь, эта статья оказалась вам полезной. Удачного кодирования!