Введение

В этой статье я попытаюсь объяснить как можно лучше разницу между типами Weakly vs Strongly & Dynamically vs Static, потому что я видел в кругах вокруг меня и сам совершал эту ошибку, что люди путают Strongly с Статически и Слабос Динамически. Так что, надеюсь, я смогу ясно объяснить их в следующих нескольких разделах, и что к концу статьи у вас будет четкое представление о каждой из этих концепций.

Слабо типизированные и строго типизированные языки

Языки со слабой типизацией

Языки со слабой типизацией — это языки, в которых тип не применяется принудительно, а это означает, что если у нас есть значение типа A и мы попытаемся приписать это значение переменной типа B, язык разрешит это и преобразует значение типа A в значение типа A. значение типа B для этой переменной. Одним из хорошо известных примеров слабо типизированного языка является Javascript, где нет принудительного применения каких-либо типов, а переменные могут принимать значения любого типа независимо от текущего типа, мы можем увидеть это при использовании == vs ===, где == позволяет сравнивать переменные разных типов, а === обеспечивает проверку типа.

Языки со слабой или несколько слабой типизацией

  • Javascript
  • C
  • PHP

Языки со строгой типизацией

Строго типизированные языки — это языки, в которых тип переменной строго соблюдается и нет неявного преобразования типов, то есть, если у нас есть значение типа A и мы попытаемся приписать это значение переменной типа B, мы получим ошибку. обычно во время компиляции для скомпилированных языков. Одним из примеров строго типизированного языка является Python, где, например, мы не можем сделать:

var_1 = 23
print("The value of the variable is " + var_1)

Мы получим сообщение об ошибке, информирующее нас о том, что var_1 не является строкой и не может быть добавлена ​​к другой строке.

Примечание.Python примет что-то вроде 1 + 2,3, что равняется 3,3.

Языки со строгой или частично строгой типизацией

  • Джава
  • питон
  • C#

Статически и динамически типизированные языки

Статически типизированные языки

Статически типизированные языки — это языки, в которых типы являются явными и, следовательно, применяются во время компиляции, например, когда у нас есть

int x = 10
String y = "Some test string"
Object o = {
  z: 1
}

это будет статически типизированная система, потому что она использует (int, String, Object) , поэтому компилятор может проверить, что 10 действительно является целым числом.

Примечание.Языки могут быть статически и слабо типизированы одновременно, например, в C мы можем сделать int = 10.0, что эффективно преобразует от 10.0 до 10 (от float до int), в Java мы не могли бы этого сделать, потому что float не является int, и поэтому мы получили бы ошибку.

Статически типизированные языки

  • Java (кроме var)
  • C# (кроме var)
  • C

Языки с динамической типизацией

Динамически типизированные языки — это языки, в которых типы неявны и поэтому проверяются только во время выполнения, например, с Javascript, когда у нас есть

let value = "Some text"

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

Статически типизированные языки

  • Javascript
  • питон

Хорошее практическое правило

Строго и слабо типизированные типы касаются принудительного применения типов переменных, в строго типизированных языках, если переменная является строкой, то она является строкой и не может быть преобразована в int, в то время как в слаботипизированных языках это возможно, string и int — это просто примеры, это может быть любой два типа вы хотите.

Динамические и статические типы учитывают, насколько явными являются типы, а это означает, что в динамически типизированных языках тип определяется только во время выполнения, и до тех пор программа не знает, к какому типу относится переменная, в то время как в статически типизированных языках тип определяется во время компиляции и является явным, int, string, Person и т. д., часто тип пишется самим программистом.

Заключение

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

Надеюсь, это поможет вам в будущем, если у вас есть какие-либо вопросы/предложения, не стесняйтесь оставлять комментарии.