Концепция «Excel [пустая] ячейка» на любом языке программирования?

В Excel есть пустая ячейка, которая имеет некоторые интересные свойства, когда дело доходит до вычислений:

Ниже мы предполагаем, что ячейка A1 пуста.

  • Пустая ячейка равна другой пустой ячейке: =A1=A1.
  • Пустая ячейка соответствует '', 0 и FALSE: =A1 = "", =A1=0, =A1=FALSE.
  • Пустая ячейка приведет к ожидаемому типу операнда: =A1+A1 (0), =-A1 (0), =A1&A1 ("").

Я полагаю, что ближайший элемент, который я нашел, — это функция bool в python, которая охватывает первые два случая выше:

  • bool(None) == bool(None)
  • bool(None) == bool(0), bool(None) == bool(''), bool(None) == bool(False)

Но это не распространяется на третий случай, когда он неявно приводится к ожидаемому типу. Есть ли что-нибудь в языке, который покрывает это?


Вот видео, показывающее некоторые свойства: https://gyazo.com/b23989ba1fd28500aff32a6b6cb6dca5.

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

rici 29.12.2022 02:53

@rici, что может быть примером такого правила принуждения Awk? В основном с проверкой на равенство или как?

David542 30.12.2022 01:27

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

rici 31.12.2022 16:15

Интересный. Что именно вы ищете? Любая функция на любом языке, которая следует логике? Какова конечная цель?

tukan 01.01.2023 10:53

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

Guy Coder 01.01.2023 14:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  • Пустая ячейка в Excel — это не data type, а объект с несколькими параметрами.
  • Равенство пустой ячейки зависит от пустой ячейки и другого значения или типа ячейки.
  • Помните, что пустая ячейка в Excel может быть date, currency или Boolean.

Таким образом, самая близкая к пустой ячейке Excel вещь на самом деле «нулевая» в большинстве языков программирования. пустая ячейка - это состояние, а не тип данных.

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

Fogmeister 01.01.2023 12:17

Да, в большинстве слабо типизированных языков он равен нулю.

user16930239 01.01.2023 13:23

@user16930239 user16930239 конечно, но обычно null выдает null по сравнению с чем-либо еще (я больше думаю о sql), или вы думаете о конкретном языке, который использует null иначе, чем этот?

David542 02.01.2023 07:43

@ David542, в таком случае, интересно, Void может быть лучшая аналогия?

Fogmeister 03.01.2023 10:04

@Fogmeister Я вижу, например, на каком языке javascript? с? и т. д.

David542 03.01.2023 21:47

@ Дэвид542 Я не уверен. Просто интересно обсуждение. 😅

Fogmeister 03.01.2023 22:31
Ответ принят как подходящий

Есть ли что-нибудь в языке, который покрывает это?

Короткий ответ:

Языки, которые поддерживают синтаксическую унификацию, например. Пролог, журнал данных, программирование набора ответов, ... .
Эти языки программирования обычно являются языками логического программирования.



Вот демонстрации вашего списка с использованием SWI-Prolog

Примечание: в Прологе = это объединение, а не сравнение ==. В некоторых ситуациях, если вы думаете о переменной как об именованном указателе, а об унификации как об установлении указателей равными, это имеет смысл, но эта аналогия работает только в определенных случаях, вас предупредили.


  • Пустая ячейка равна другой пустой ячейке: =A1=A1.
?- A = B.
A = B.

Теперь, если A привязано к значению, то B также связано, потому что они унифицированы.

?- A = B,A=1.
A = B, B = 1.

  • Пустая ячейка соответствует '', 0 и ЛОЖЬ: =A1="", =A1=0, =A1=ЛОЖЬ.

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

Поскольку Пролог не является строго типизированным , переменная не имеет типа, пока значение не привязано к переменной, подумайте о Python с утиной типизацией. Даже в этом случае концепция конкретного типа может оказаться не такой, как вы ожидаете.

Однако, когда второе утверждение рассматривается с третьим утверждением

  • Пустая ячейка приведет к ожидаемому типу операнда: =A1+A1 (0), =-A1 (0), =A1&A1 ("").

затем, как уже отмечалось, переменная Prolog (пустая ячейка Excel) приобретает тип при связывании.

?- (var(B)->write('B is variable');write('B is not variable')),nl,(integer(B)->write('B is integer');write('B is not integer')),nl,A is 2,(integer(A)->write('A is integer');write('A is not integer')),nl,A=B,(integer(B)->write('B is integer');write('B is not integer')).
B is variable
B is not integer
A is integer
B is integer
B = A, A = 2.

Другие вопросы по теме