Спрете да злоупотребявате с низове

Низовете са невероятно гъвкав тип данни и освен ако не сте изчислителен физик, ще ги използвате в почти всяко приложение. Според моя опит те се използват прекалено много и могат да доведат до някои неприятни грешки. За щастие, повечето езици имат по-строги типове данни, така че няма извинение да използвате низове, когато има по-добра алтернатива.

Безкрайните възможности не винаги са нещо добро.

Струните имат практически безкраен брой вариации. Ако използваме ASCII и Javascript низове, има 256 възможни знака и максимална дължина на низа 2**30 - 2 (1073741822) във Firefox. Ако всяка позиция в низ може да бъде една от 256 знака и има 1073741822 знака, броят на комбинациите е 256**1073741822. Опитайте да го въведете в REPL.

Реално погледнато, низовете няма да са толкова големи. „Средната дължина на една дума на английски е 4,7“. Но дори при 5 знака и само малки букви има 5**26 възможни комбинации (1490116119384765700).

Разчитането на низове за определяне на бизнес логиката е антимодел.

Може би проектирате приложение, което взема биологичните черти на индивида, за да определи риска от развитие на конкретно заболяване по-късно в живота. От предишни проучвания мъжете имат 50% по-голям шанс от жените да развият това заболяване. Следното е основен бъг и е трудно да се отстрани, защото не се генерира грешка:

Грешно изчисление като това може да доведе до недоволни клиенти, грешни диагнози, неправилни траектории на ракети, загубени невинни животи и „края на света, какъвто го познаваме“… Освен това улеснява вашето IDE да индексира кода ви, правейки навигация и рефакторинг лек бриз.

За щастие има лесни начини да избегнем отговорността за падането на човечеството.

Алтернативи на струните

Енуми

Ако имате достатъчно късмет да работите с език с enum, няма извинение да използвате низове вместо това.

Това не само ви дава спокойствието, осигурено от грешки по време на компилиране, но също така осигурява самодокументиращ се код. Знаете със сигурност, че person.sex ще бъде само или Sex.male, или Sex.female.

Какво ще стане, ако езикът ми няма enums?

Намерете си друга работа. Шегувам се, езиците със свободен тип са забавни за работа и могат да бъдат направени по-безопасни с чисти навици за кодиране. Използвам карта на низове:

Не е ли това все още просто сравняване на низове? Все още може да не съвпада.

И това е правилно. За съжаление това е името на играта с нетипизирани езици. За да заобиколите това, използвайте TDD, фабрични методи, изключения и за бога обвийте външен apis.