Перейти к содержимому

Что значит восклицательный знак в программировании

  • автор:

Что означает два восклицательных знака "!!" перед выражением?

Что означает, когда пишут два восклицательных знака перед переменной или любым другим выражением? Например:

  • приведение типов
  • JavaScript

Аватар пользователя Ivan Gagarinov

Прежде всего давайте вспомним что вообще делает восклицательный знак в обычных ситуациях. Он является логическим оператором "не". Простой пример, проверяем что выражения между собой равны:

Если хотим проверить что они не равны, то добавляем восклицательный знак:

То есть мы "перевернули" (инвертировали) проверку. Примерно то же самое происходит, когда мы добавляем восклицательный знак перед любым выражением:

Обратите внимание, перед myVar стоит восклицательный знак, это отрицание, то есть можно прочитать это как "не myVar". Восклицательный знак инвертирует наше выражение, которое является строкой 'test'. Но тут возникает вопрос: а что является не строкой 'test'? Если подойти к вопросу философски, то можно найти бесконечное множество вещей, которые являются не строкой 'test'. Но у интерпретатора JS на этот счёт есть чёткое правило: он вычисляет выражение справа от восклицательного знака так, чтобы получить либо true , либо false , то есть приводит к булевому типу. Строка 'test' приводится к булевому типу и вычисляется как true , а восклицательный знак инвертирует, то есть переворачивает true на false , так как false является противоположностью true .

Теперь гораздо легче понять что делают два восклицательных знака:

Интерпретатор пытается вычислить сначала !content . Если content будет ложным выражением, то вычислится true , если истинным, то false . А второй восклицательный знак переворачивает true на false , а false на true . В итоге, если контент существует, то функция вернёт true , а если не существует, то false .

Теперь возникает вопрос: зачем вообще это нужно? Это делается чтобы мы всегда работали с определённым типом. Такой хитрый способ позволяет нам добиться чтобы функция всегда возвращала булевый тип. Любое значение будет преобразовываться в этот булевый тип. Это называется приведение типов.

TypeScript: восклицательный знак

В этой статье мы рассмотрим одну из интересных особенностей TypeScript — восклицательный знак. Он используется для работы с типами и предоставляет разработчику возможность указать, что значение переменной гарантированно не будет равно null или undefined .

Синтаксис

Восклицательный знак ставится после имени переменной и перед точкой, когда мы обращаемся к свойствам объекта:

Зачем это нужно?

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

В таких случаях восклицательный знак позволяет указать компилятору, что значение переменной гарантированно определено, и ошибки не возникнет. Это позволяет избежать ненужных проверок на null и undefined .

Пример использования

В примере выше, мы создали интерфейс User с опциональным полем email . В функции getEmail мы используем восклицательный знак, чтобы указать, что значение email точно будет определено.

Важное замечание

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

Альтернативы восклицательному знаку

Если вы не уверены в том, что значение переменной гарантированно определено, рассмотрите использование других подходов, предоставляемых TypeScript для работы с возможными null или undefined значениями.

Оператор объединения с null (??)

Оператор объединения с null позволяет задать значение по умолчанию, которое будет использовано, если значение переменной равно null или undefined :

Оператор опциональной цепочки (?.)

Оператор опциональной цепочки позволяет безопасно обращаться к свойствам объекта, которые могут быть null или undefined , вернув значение undefined , если это происходит:

Заключение

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

Зачем нужен восклицательный знак при объявлении переменной TS?

тк он явно не является частью названия переменной, также не думаю, что он говорит о том, что переменная не может быть равна null | undefined:

  • Вопрос задан более года назад
  • 2141 просмотр

Простой 1 комментарий

  • Facebook
  • Вконтакте
  • Twitter

Aetae

Моя реакция когда я вижу всё это новомодное дерьмо: dac8bf2dd74caed70a595b6188b805bd.jpg

Понимание использования восклицательного знака перед функцией в JavaScript

A JavaScript function ready to be immediately invoked.

В JavaScript, очень распространена практика использования восклицательного знака перед функцией. Это может вызвать некоторое недоумение, особенно у тех, кто только начинает изучать язык. Чтобы разобраться в этом, рассмотрим следующий пример:

Вот что происходит. Здесь восклицательный знак ( ! ) используется перед функцией для того, чтобы JavaScript интерпретировал выражение как функциональное выражение, а не как объявление функции.

В JavaScript, функциональные выражения и объявления функций обрабатываются по-разному. Объявления функций «всплывают» в верхушку своего контекста выполнения, что позволяет вызывать функцию до того, как она была объявлена. С другой стороны, функциональные выражения не «всплывают» и могут быть вызваны только после того, как они были определены.

Когда перед функцией стоит восклицательный знак, JavaScript принимает это как функциональное выражение, а не как объявление функции. Это позволяет немедленно вызвать функцию.

В этом контексте, восклицательный знак действует как логическое отрицание. Он превращает результат функции в булево значение и затем инвертирует его. Но поскольку цель здесь в основном состоит в том, чтобы вызвать функцию, а не получить булево значение, результат этого отрицания обычно игнорируется.

Важно заметить, что вместо восклицательного знака можно использовать и другие операторы, такие как + , — ,

или void . Они все смогут превратить объявление функции в функциональное выражение, позволяя его немедленно вызвать.

В итоге, восклицательный знак перед функцией в JavaScript — это просто способ сделать функцию немедленно вызываемой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *