Как вы боретесь со слабой типизацией и зачем ее придумали?

Я замучался. Пишу проект на vue.js. Постоянно приходится приводить данные к одному типу, т.к. иначе возникают трудноуловимые баги. Как вы пишете код на жс? Он же не должен быть напичкан parseInt() и !== undefined. Как правильно обрабатывать типы?
И самое главное: кто придумал слабую типизацию? Какие плюсы от нее? Единственное что дает слабая типизация - это заставляет постоянно проверять тип.
  • Вопрос задан
  • 1537 просмотров
Решения вопроса 2
И самое главное: кто придумал слабую типизацию?

Для начала разберитесь с классическим заблуждением, и не путайте слабую типизацию и динамическую типизацию. Сейчас из вашего вопроса можно подумать, что это одно и то же.

Динамическую типизацию придумали для того, чтобы было легче писать обобщённые алгоритмы и мета-алгоритмы, в дин. языке для обобщения кода не нужны ухищрения типа дженериков (TypeScript, C# и много чего ещё) или шаблонов/макросов (C++). В ОО-языках часто доступны и другие удобства, например смена интерфейса объекта в зависимости от его состояния (т.к. решение о возможности вызова метода/свойства объект может принимать сам).

Слабую типизацию придумали чтобы заставить людей страдать (да, я не знаю кому такое нужно вообще).

Как вы пишете код на жс?

Мы не пишем код на JS, мы пишем код на TypeScript. Да, такие сейчас странные времена, когда язык со статической типизацией компилится в язык с динамической, т.к. исполнять на клиенте (в браузере) больше нечего пока.

Он же не должен быть напичкан parseInt() и !== undefined.

Не должен. Если писать на голом JS, можно а) использовать JSDoc для аннотаций о типах, и работать с типами на уровне документации и договорённостей; б) писать алгоритмы в максимально обобщенной манере, и требовать по возможности не конкретных типов данных, а значений, над которыми допустимы нужные вам операции; в) покрывать код тестами, что и спасает в динамических языках.

Чем больше проект, тем важнее статическая типизация, это нормально. JS - это язык который популярен по техническим причинам и по стечению обстоятельств, а не потому что он этого заслуживает (имхо). Очень неглупые дяди и тёти не стали бы тратить годы своего времени и кучу денег на разработку TypeScript и Flow, если бы это было ненужно.
Ответ написан
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Хорошая архитектура снижает необходимость в приведении типов.
5af00f1b811b0153622827.png
А придумали и используют динамическую типизацию потому, что она существенно снижает TTM.
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
rockon404
@rockon404
Frontend Developer
Для этого в проектах используют TypeScript или Flow:
const foo = (arg: number) => { /* do something with number type */ };

Сейчас без них большие проекты лучше даже не начинать.

О преимуществах слабой типизации:
1. Удобство использования смешанных выражений (например из целых, вещественных чисел и строк).
2. Абстрагирование от типизации и сосредоточение на задаче.
3. Краткость записи.
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Если ты дергаешь всякие значения из документа, или из форм, то по умолчанию там тип данных - строка, а раз так, то чему тут удивляться, парси строку. Если ты не объявляешь какую-то переменную, или не задаешь какой-то параметр для функции, то снова, почему удивления, js мыслей читать не умеет? Еще есть параметры по умолчанию.
Ответ написан
Комментировать
Я не борюсь с ней, я ей наслаждаюсь. Во-первых, у меня крайне редко в переменной бывает несколько типов - если переменная, допустим, строковая, то строковой она и будет. Если же в переменной число, то оно и будет числом, плюс я проведу проверку перед использованием на корректность числа. А во-вторых, всего-то нужно знать базовые правила приведения типов, которые очень простые и понятные в JS. Хотите верьте, хотите нет, но у меня последняя ошибка, связанная со слабой типизацией, была года три назад, если не раньше.
Ответ написан
Yertuwernat
@Yertuwernat
Кратко о себе: живу в России, не женат, характер
Тебе надо бы подучить матчасть в общей теории.
Это догмат такой, у тех людей кто умеет работать только в рамках готового шаблона...

Алан Кей сказал:


«Пока мы не придумаем, как по-настоящему нужно разрабатывать софт, выходом может быть создание динамических систем с экстремально поздним связыванием во всех его проявлениях».

«Позднее связывание позволяет воплощать идеи на поздних стадиях разработки с экспоненциально меньшими усилиями чем традиционное раннее связывание как в C, С++, Java и прочих похожих языках»

«Если вы используете язык с ранним связыванием, как делает большинство людей, вместо языка с поздним связыванием, вы окажетесь взаперти у проделанной работы. Переформулировать что-то будет уже непросто»

«Я не против типов, но я не знаю ни одной системы с типами, которая бы не вызвала мучений, так что я по-прежнему за динамическую типизацию»



аналогично обычно люди не понимают что такое ООП:


«Я думал об объектах как о живых клетках или как об отдельных компьютерах в сети, которые обмениваются сообщениями... Я жалею, что придумал термин «объекты» много лет назад, потому что он заставляет людей концентрироваться на мелких идеях. По-настоящему большая идея — это сообщения... Объектно-ориентированное программирование для меня означает только отправку сообщений, локальное удержание и защиту, а также скрытие состояний-процессов, и экстремально позднее связывание всего»
Ответ написан
Комментировать
OnYourLips
@OnYourLips
Слабая динамическая типизация удобна, когда надо что-то наговнокодить на коленке на десяток строк, не имея особых навыков. И за исключением нескольких последних лет JS так и использовался.
Ответ написан
Ктож тебя заставляет ее использовать? Бери вон Dart 2, там "Strong, Sound Typing"
https://medium.com/dartlang/announcing-dart-2-80ba...

А вообще есть хорошая поговорка про зеркало и рожу.
Ответ написан
Комментировать
zetamen
@zetamen
В поисках нового
Вы как-то однобоко смотрите на язык. Для сайтиков отсутствии типизации прямо сильно хорошо, там нет особо сложной логики, разработка идет быстрее

Для js-приложений, spa итд лучше, конечно, иметь какую-никакую типизацию. Уже посоветовали Flow и TypeScript. Я бы к этому списку добавил Closure Compiler, который в плане типизации и тем более обфускации прям хорош.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы