Сильная и слабая типизация¶
Типизированные языки программирования также разделяются на сильно и слабо типизированные. Очень часто можно услышать их неверные синонимы строгая и нестрогая типизация. Эти синонимы считаются некорректными, так как произошли в результате неверного перевода англоязычных терминов strongly typed и weakly typed, что дословно переводится как сильно типизированные и слабо типизированные.
Сильная типизация¶
Языки с сильной типизацией (strongly typed) не разрешают выполнение выражений с несовместимыми типами и не выполняют неявное преобразование типов в ситуациях, когда нужно выполнять преобразование явно.
Сильно типизированный язык не позволит такие операции, как умножение числа на массив и не выполнит неявного преобразования объекта к строке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
В языках с сильной типизацией при операциях, способных привести к потере или порче значения, возникает ошибка. Благодаря этому сильно типизированные языки в меньшей степени подвержены багам.
К языкам с сильной типизацией можно отнести такие языки, как Java, C# и другие.
Слабая типизация¶
Языки со слабой типизацией (weakly typed) разрешают выполнение выражений с любыми типами и самостоятельно выполняют неявное преобразование.
Например, в JavaScript при операции сложения строки и числа второй операнд может быть неявно приведён к строке, а при сложении строки и объекта объект будет неявно приведён к значению, возвращаемому объектом из метода toString()
, то есть строке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Из-за того, что в языках со слабой типизацией допускаются неявные преобразования, существует высокая вероятность возникновения трудно выявляемых багов. Причиной появления подобных багов является отсутствие возникновения ошибок в некоторых операциях неявного преобразования. Программа получает данные ожидаемого типа, но непредсказуемого значения.
1 2 3 4 5 |
|
К языкам со слабой типизацией относятся JavaScript или PHP*.