Всё началось с моего желания описать структуру сообщений между web worker'ами. К сожалению, на тот момент встроенные возможности TypeScript этого не позволяли.
Я засучил рукава и решил это исправить.
Читать полностью »
Всё началось с моего желания описать структуру сообщений между web worker'ами. К сожалению, на тот момент встроенные возможности TypeScript этого не позволяли.
Я засучил рукава и решил это исправить.
Читать полностью »
Вы, возможно, помните недавний анонс нового статического анализатора для Go под названием go-critic.
Я проверил с его помощью проект golang/go и отправил несколько патчей, которые исправляют некоторые найденные там проблемы.
В этой статье мы разберём исправленный код, а также будем мотивироваться отправлять ещё больше подобных изменений в Go.
Для самых нетерпеливых: обновляемый список трофеев.
Давно планировали отправить патч в Go, но постоянно откладывали?
Сталкивались с трудностями, не знали, с чего начать?
В данной статье я опишу как мы проводили Go contribution workshop в Казани,
о его результатах, а также об уроках, которые извлекли организаторы.
Спойлер: планируется повторить это мероприятие когда Go перейдёт в фазу активной разработки (выйдет из состояния code freeze). Подробности смотри под катом.
Если вспомнить все ТЗ с описаниями валидации полей — они всегда выглядили примерно так:
Требования часто приходят набором простых однозначных фраз. А мы, программисты, переводим эти требования в код.
Можно превращать их в одно ультимативное регулярное выражение, вроде
const validateLogin = login => /^[a-zA-z_d]{6,12}$/.test(login);
Но лучше писать более простые функций которые легче читать и связывать с непосредственным ТЗ:
const charMatch = new RegExp('^[a-zA-Z_0-9]*$');
const validateLogin = login => {
if (login.length < 6) return false;
if (login.length > 12) return false;
if (!charMatch.test(login)) return false;
return true;
};
А что если ещё сильнее упростить этот код до чего-то вроде:
const validateLogin = login =>
validate(login)
.notLessThan(6)
.notLongerThan(12)
.hasOnly(['a-z','A-Z','0-9','_']);