Каковы ключевые аспекты языка со строгим контролем типов?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

17
задан Mansfield 7 June 2012 в 02:59
поделиться

7 ответов

Термин "со строгим контролем типов" имеет не согласованный определение.

Это приводит "большой" аргумент в flamewar, потому что каждый раз, когда кто-то доказан неправым, они могут просто переопределить его для значения независимо от того, что они хотят, чтобы это означало. Кроме этого, термин не служит никакой реальной цели.

Лучше просто не использовать термин, или, если Вы используете его, строго определяете его сначала. Если Вы видите, что кто-то еще использует его, просит, чтобы он определил термин.

у Всех есть их собственное определение. Некоторые, что я видел:

  • со строгим контролем типов = со статическим контролем типов
  • со строгим контролем типов = явно ввел
  • со строгим контролем типов =, номинально ввел
  • со строгим контролем типов =, ввел
  • со строгим контролем типов =, не имеет никаких неявных преобразований типа, только явный
  • со строгим контролем типов = не имеет никаких преобразований типа во всем
  • со строгим контролем типов =, что я понимаю / со слабым контролем типов =, что я не понимаю
  • со строгим контролем типов = C++ / со слабым контролем типов = все остальное
  • со строгим контролем типов = Java / со слабым контролем типов = все остальное
  • со строгим контролем типов =.NET / со слабым контролем типов = все остальное
  • со строгим контролем типов = мой язык программирования / со слабым контролем типов = Ваш язык программирования

В Теории типов, там существует понятие одной системы типов, являющейся более сильный , чем другой. В частности, если там существует выражение e1, таким образом, что оно принято системой типов T1, но отклонено системой типов T2, затем T2, как говорят, более сильны , чем T1. Существует две важных вещи отметить здесь:

  1. это сравнительное, не абсолют: нет никакого силен или слабый , только [1 111] более сильные и более слабый
  2. нет никакого значения, подразумеваемого термином; более сильный не означает лучше
26
ответ дан 30 November 2019 в 10:22
поделиться

Я слышал, что кто-то сказал в интервью (я думаю, что это был Anders Hejlsberg C# и турбо известность Паскаля), что строгий контроль типов не что-то, что это идет или прочь, некоторые языки имеют более сильную систему типов, чем другие.

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

Попытка Википедия для большего количества информации, но не ожидают окончательный ответ: http://en.wikipedia.org/wiki/Strongly_typed_language

4
ответ дан 30 November 2019 в 10:22
поделиться

Люди путают со статическим контролем типов с со строгим контролем типов. Со статическим контролем типов означает, что "Строка является строкой, строка". Со строгим контролем типов означает, "После того как Вы делаете это строкой, ее будут рассматривать как строку, пока она не будет повторно назначена чем-то другим".

редактирование: Я вижу, что кто-то еще действительно указывал на это, в конце концов, :)

6
ответ дан 30 November 2019 в 10:22
поделиться

Со строгим контролем типов означает, что Вы объявляете свои переменные определенного типа, и Ваш компилятор бросит соответствие hissy, при попытке преобразовать ту переменную в другой тип, не бросая его.

Пример (в Java, обратите внимание):

int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
1
ответ дан 30 November 2019 в 10:22
поделиться

По словам до н.э. Pierce, парня, который записал "Типы и Языки программирования и Усовершенствованные Типы и Языки программирования":

я провел несколько недель, пытаясь разобраться в терминологии "со строгим контролем типов", "со статическим контролем типов", "безопасных", и т.д., и нашел его удивительно трудным... Использование этих условий является столь различным, что представляет их почти бесполезный.

Таким образом неудивительный, почему Ваши коллеги не соглашаются.

я пошел бы с самым простым ответом: если можно связать строку и интервал без кастинга, то это не со строгим контролем типов.

РЕДАКТИРОВАНИЕ: как указано в комментариях, Java просто делает это :-(

11
ответ дан 30 November 2019 в 10:22
поделиться

Ключ должен помнить, что существует различие между со статическим контролем типов и со строгим контролем типов. Язык со строгим контролем типов просто означает, что когда-то присвоенный, данная переменная будет всегда вести себя как определенный тип, пока это не будет повторно присвоено. По определению статически типизированные языки как Java и C# со строгим контролем типов, но так являются многими популярными динамическими языками как Ruby и Python.

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

x = "5"

x всегда будет строкой и никогда не будет целым числом.

На определенных языках со слабым контролем типов Вы могли сделать что-то как

x = "5"
y = x + 3
// y is now 8
7
ответ дан 30 November 2019 в 10:22
поделиться

Термин «строго типизированный» совершенно бессмысленен. Это не имеет значения и никогда не имело. Даже если некоторые из заявленных определений были точными, я не вижу смысла в причинах различий; Почему важно знать, обсуждать или обсуждать, является ли язык строго типизированным (что бы это ни значило) или нет?

Это очень похоже на термины «Web 2.0» или «OEM», которые также не имеют реального значения.

Что интересно, так это то, как эти фразы начинаются и укореняются в повседневном общении.

1
ответ дан 30 November 2019 в 10:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: