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

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

  • автор:

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

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

const isTrue = (content) =>  return !!content; >; 
  • Количеству голосов ▼
  • Дата создания

26 апреля 2022

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

console.log('test' === 'test'); // => true 

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

console.log('test' !== 'test'); // => false 

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

const myVar = 'test'; console.log(!myVar); // => false 

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

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

const isTrue = (content) =>  return !!content; >; 

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

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

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

I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Форумчанин
Регистрация: 01.09.2008
Сообщений: 178
Сообщение от TrueMethod

Спасибо!
«if(!RegisterClassEx(&windowsclass) )» можно так прочесть:
если НЕ функция registerclassex принимает значение &windowsclass , тогда условие выполнится.

Это условие проверяет зарегистрировался класс или нет. Если нет — if(!RegisterClassEx(&windowsclass)) — то выполняются команды из тела if, иначе продолжается выполнение команд в теле main.

Быть радикальным — значит понять вещь в её корне. К.Маркс
Регистрация: 29.09.2009
Сообщений: 9,742
ну автор-то доволен?

Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Регистрация: 02.10.2009
Сообщений: 3
Да большое спасибо, я уходил, поэтому сразу не ответил .
Ещё раз большое спасибо !

TrueMethod
Посмотреть профиль
Найти ещё сообщения от TrueMethod
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе «магазин»- код товара появлялось «описание» товара из «склада» с «продажной ценой» aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Правда ли что Java «Тяжелая» и все «вешает» ? webmaster-n Общие вопросы по Java, Java SE, Kotlin 10 30.07.2009 01:22
блок «cont» с права не принимает значение «margin: 10px;» которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Что означает понятие «методическое обеспечение» Stilet Свободное общение 4 16.11.2008 22:42
если пользователь наберет какой-то другой символ не «y» или «n» и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51

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

Author24 — интернет-сервис помощи студентам

if (m == feb && d == 29 && !leapyear(y + n))
что означает восклицательный знак пере функцией липиеар?

Добавлено через 5 минут
если функция НЕ выполняется? или если результат неправильный, то условие срабатывает

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Что означает знак & в объявлении функции
Здравствуйте, в обучающих статьях о С++ наткнулся на очень интересную синтаксическую конструкцию.

Что значит знак ~ перед именем функции?
Что значит знак ~ перед именем функции? И что он значит вообще?

Что значит восклицательный знак перед функцией?
Обьясните пожалуйста, что значит восклицательный знак: !function(). И ещё вопрос: как.

Что означает восклицательный знак после «uptime»
Сегодня в Htop’e заметил "!" после uptime’a что это значит?

2439 / 1046 / 477
Регистрация: 17.11.2018
Сообщений: 2,726
!leapyear(y + n), то же, что и: leapyear(y + n) == 0 или leapyear(y + n) == false
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746

ЦитатаСообщение от kusancho Посмотреть сообщение

что означает восклицательный знак пере функцией липиеар?
Это операция «логическое НЕ». Меняет ИСТИНУ на ЛОЖЬ и обратно.
Регистрация: 30.10.2018
Сообщений: 106

jugu, да. Условие в скобочках будет выполняться если leapyear() вернет ЛОЖЬ?

Добавлено через 3 минуты
analogov net,

ЦитатаСообщение от analogov net Посмотреть сообщение

leapyear(y + n) == 0

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

2439 / 1046 / 477
Регистрация: 17.11.2018
Сообщений: 2,726

Лучший ответ

Сообщение было отмечено kusancho как решение

Решение

ЦитатаСообщение от kusancho Посмотреть сообщение

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

kusancho, функцию ты пишешь так, как тебе удобно, функция может возвращать разные значения, например : true, false, -1, 0, 1 и т.д. Но данная конструкция( if(. ) ) выполнит своё условие, только, когда результатом функции будет 0 или false.

610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746

ЦитатаСообщение от kusancho Посмотреть сообщение

Условие в скобочках будет выполняться если leapyear() вернет ЛОЖЬ?

Проверка условия m == feb && d == 29 && !leapyear(y + n) будет проходить так.
1. Если m == feb есть false, то остальные составляющие не вычисляются и результат условия есть false.
2. Если m == feb есть true, то проверяется d == 29.
2.1. Если d == 29 дает false, то последний элемент не вычисляется и результат есть false.
2.2. Если d == 29 дает true, то вызывается функция leapyear().
2.2.1. Если leapyear() дает false, то результат всей конструкции есть true.
2.2.2. Если leapyear() дает true, то общий результат есть false.

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

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

!function() < // Какой-то код. >();

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

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

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

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

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

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

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

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