Что такое var в Java 10?
Java 10 ввел var в качестве имени резервного типа, чтобы уменьшить многословие. Его можно использовать как переменную, метод и имя пакета, но мы не можем использовать его как имя класса или интерфейса.
Является ли var похожим на ключевое слово var в JavaScript? В чем именно сходство и различие между Java var и JavaScript var ?
2 ответа
Не могли бы вы объяснить мне, что такое VAR в LINQ, почему мы используем во всех LINQ запросах. var result = from sta in db.uploaddetails where sta.Keyword==issue.uploaddetails.Keyword select sta; Что такое VAR здесь . почему LINQ запрос полностью отличается от SQL запроса.
В clojure, (var some-function) и #’some-function эквивалентны. Что такое clojurescript эквивалент var ?
var служит несколько концептуально сходной цели в обоих языках, но есть важные различия.
JavaScript — это динамически типизированный язык . Переменная не имеет информации о типе. Он не имеет ограничений на то, что он может содержать. Это просто держатель для значения, и значение может быть любого типа.
Java-это статически типизированный язык, и для всех этих утверждений верно обратное. Программист должен заранее сказать, какой тип может содержать его переменная. Они могут быть такими же мягкими, как Object (каждый класс расширяет Object неявно), или такими же конкретными, как FieldTagTestsVisitorComparator .
В JavaScript году я могу очень кратко написать
и у меня есть место для хранения значения, которое я могу прочитать или манипулировать позже.
Если позже в своем коде я решу, что хочу назначить этой переменной что-то другое, я могу это сделать.
Вы можете ясно видеть, с какими декларациями лучше работать. Люди часто жалуются на многословие Java. В приведенном выше примере я дважды объявлял FieldTagTestsVisitorComparator в одной и той же строке. Какую ценность это добавляет? Я только что повторил.
var в Java стремится сократить количество повторных заявлений . Как и оператор diamond до него, разработчики языка пытаются улучшить компилятор Java, чтобы он был достаточно умен, чтобы делать выводы о том, что задумали программисты. Почему что-то должно быть явным, если оно может быть неявным?
На практике это означает, что тип переменной в left-hand-side присваивания выводится из right-hand-side.
Если я напишу следующее в Java
тогда компиляторы Java 10+ достаточно умны, чтобы распознать строковый конструктор на right-hand-side и автоматически присвоить переменной foo соответствующий тип.
Это принципиально отличается от JavaScript, потому что, хотя я не указал тип, тип все еще присутствует . Я не могу впоследствии назначить ему что-либо, что мне нравится:
var используется исключительно во время компиляции. Компилятор вычисляет тип, заменяет его, и байт-код остается таким же, как если бы он никогда не использовался. Нет никакой функциональной разницы между
Это чисто косметическое различие , которое делает язык более выразительным.
Примечание о статусе var
Java разработчики языков всегда очень осторожны при добавлении новых функций, чтобы не нарушить обратную совместимость, и поэтому var имеет несколько особый статус. Это не ключевое слово, потому что наличие статуса ключевого слова было бы чрезмерно ограничительным. Например, ключевые слова нельзя использовать в качестве идентификаторов; У меня не может быть метода с именем if , потому что if -это ключевое слово.
var -это, как говорится в вашей цитате, «reserved type name». Поначалу это звучит сложно, но на самом деле это очень описывает статус var . Это имя типа, зарезервированного Java. Вы не можете назвать свои типы — классы, интерфейсы, перечисления — var , потому что это внесло бы двусмысленность.
Вы по — прежнему можете использовать слово «var» в любом другом контексте-имена методов, идентификаторы переменных и т. Д.
Имея этот статус, дизайнеры максимально увеличили обратную совместимость (за исключением того, что вообще не добавили эту функцию!). Если только у вас не было класса с именем в нижнем регистре var -и, во-первых, что вы делаете, выбирая эти ужасные имена, а во-вторых, почему вы, по крайней мере, не следовали соглашению об именах и не назвали его Var ? — тогда вы защищены от любых критических изменений.
Хорошая особенность, верно? Это определенно так, но важно не просто начать использовать его везде только потому, что вы можете. У Стюарта Маркса, одного из разработчиков JDK, есть несколько отличных рекомендаций по стилю , которые я рекомендую вам прочитать.
Мое эмпирическое правило заключается в том, что если тип не указан в той же строке (как в приведенных выше примерах), то я не использую var . Компилятор достаточно умен, чтобы вывести тип из результата любого допустимого выражения, поэтому следующее вполне допустимо:
Однако, не глядя на сигнатуру метода, не сразу очевидно, какой тип переменной будет выведен. Для компилятора нет никакой двусмысленности, но она менее ясна для человека, который ее читает. В таком случае мы пожертвовали удобочитаемостью ради краткости.
Дальнейшее чтение
Я проходил через новые функции в java 10. Но я не мог понять, что такое вывод типа локальной переменной ? Может кто-нибудь, пожалуйста, объяснит.
В последнем выпуске информационного бюллетеня Heinz Kabutz, #255 Java 10: выведенные локальные переменные , показано, что var не является зарезервированным словом в Java 10, потому что вы также можете использовать var в качестве идентификатора: public class Java10
var -это то, что уже находится в C#. В основном, вместо того, чтобы объявлять тип переменной, он принимает ее тип из того, на что она устанавливается. Например:
Поскольку вы задаете ему значение в кавычках, предполагается , что это String , а не необходимость указывать как:
Похожие вопросы:
Я хотел бы спросить, Что такое var в этом утверждении. var context = new MHC_CoopEntities(); var lists = (from c in context.InventLists select new
Возможный Дубликат : Двойной знак больше (>>) в Java? К чему приводит следующее ? int num = (10-2) >> 1; Нашел это очень полезным — Что такое операторы побитового сдвига (bit-shift) и.
Я новичок в Java, и у меня был вопрос новичка. Я пытаюсь случайным образом получить значение перечисления, как показано ниже. public enum ParkedCar Random rand =.
Не могли бы вы объяснить мне, что такое VAR в LINQ, почему мы используем во всех LINQ запросах. var result = from sta in db.uploaddetails where sta.Keyword==issue.uploaddetails.Keyword select sta;.
В clojure, (var some-function) и #’some-function эквивалентны. Что такое clojurescript эквивалент var ?
Я проходил через новые функции в java 10. Но я не мог понять, что такое вывод типа локальной переменной ? Может кто-нибудь, пожалуйста, объяснит.
В последнем выпуске информационного бюллетеня Heinz Kabutz, #255 Java 10: выведенные локальные переменные , показано, что var не является зарезервированным словом в Java 10, потому что вы также.
После обзора функции var , как показано здесь : Я столкнулся с трудностями при настройке моей Eclipse/IntelliJ IDEA IDEs с JDK 10 и поэтому прошу помощи у Stack Overflow пользователей, у.
Я знаю, что мы можем использовать ключевое слово “var” для определения переменных в Kotlin: var foo = 3 Последнее обновление java (java 10) также вводит тип “var”: var bar = new int[]; //.
В моем файле JS у меня есть var previousChar = null; теперь я вручную портировал код в Java, но я получаю ошибку, что символ не может быть назначен null. Кроме того, использование ‘\0’ равно или.
Курсы javascript
Область видимости переменной — текущая функция. Если переменная объявлена вне функции, то ее область видимости — глобальный объект window.
Здесь javascript похож на традиционные языки программирования
В отличие от большинства языков, javascript блок не задает область видимости.
Переменная внешней функции видна во внутренней, благодаря наличию замыканий.
См. также
- /book/ /Синтаксическая конструкция/
А почему следующая конструкция выдает синтаксическую ошибку?
Почему нельзя делать объявление переменной внутри if?
По вашей логике тоже самое без var не должно работать. А это не так.
Операцию присвоения можно использовать как логическое выражение, вот только возвращать она всегда будет true (за некоторыми исключениями)
Подписываюсь под каждым словом вышестоящим словом
Скорее всего в ECMA просто недоглядели. Или хотели сделать var в for объявлением переменной только внутри цикла.
В цикле for ключевое слово var является частью инструкции, а в синтаксисе условия оно не предусмотрено. Ну и использовать инструкции там, где просят выражение недопустимо.
Может быть причина в том, что опреатор присваивания вроде неявно вызывает функцию GetValue(. ). В случае такого присваивания var a = 1 она, по-моему, должна возвращать 1. А если так , то эта функция возвращает булев результат. Бред, конечно, но может так оно и работает )))
Или так:
Внутри for var используется при инициализации значений. Там результат вычисления возвращать не нужно, а в if’е нужно оценить результат выражения.
Ну язык значит такой, что тут поделаешь? -__-
Обязательно ли указывать «var» при описании переменных?
Если Вы не хотите, чтобы они попали в глобальную (или уровнем выше) область видимости, то обязательно.
Если объявление (глобальной) без присвоения значения, то обязательно.
Если переменная локальная — обязательно.
Почему в данном примере в консоль выведется сообщение undefined?
убери инициализацию переменной a в теле функции (var перед a).
правильно так:
Почему var o = <7>>
>
7>
«»
>
—
‘’
‘’‘’
‘’
‘’
‘’
‘‘<‘’>»
‘<‘’>‘
————————
————————
—
«»«»
«»
<<
«»
<
<
<
’
<
<
<
<<
«»