The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreSQL, opennews (ok), 01-Окт-16, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


15. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –1 +/
Сообщение от You Might Not Need jQuery (?), 01-Окт-16, 22:42 
'undefined' 'null' :)

> NaN == NaN

false

Ответить | Правка | Наверх | Cообщить модератору

23. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +9 +/
Сообщение от Аноним (-), 02-Окт-16, 01:18 
Все объявленные переменные по умолчанию имеют тип (и значение) undefined, если при объявлении не было присвоено что-то иное.

var hello;
hello; // => undefined
typeof hello; // => 'undefined'

Оно и правильно, так как не понятно, как будет использоваться переменная дальше (какой ты предлагаешь тип в данном случае? number? а почему не string?) Любая функция также по умолчанию возвращает undefined, если результат функции не был присвоен явно через return.

function hello () {}
hello(); // => undefined
typeof hello(); // => 'undefined'

Это тоже вполне логично, и даже изящно. Если в объекте обращаются к несуществующему ключу, результатом тоже будет undefined. И это тоже логично: не стоит кидаться исключениями по любому пустяку, а то придется писать бойлерплейт типа:

var myValue = myObject.hasKey('myKey') ? myObject.get('myKey') : 0;
// сравни с:
var myValue = myObject.myKey | 0;

null - в отличие от undefined, null используется как что-то вполне себе определенное (defined). Обыкновенно используется, если нужно обозначить, что в переменной, в которой должен быть объект, прямо сейчас объекта нет:

var myObject = null; // объект зададим позже
typeof myObject; // => 'object' -- все правильно, так как myObject используется как ссылка на объект, хоть ссылка и пустая
myObject = { hello: 'world' };
typeof myObject; // => 'object'

Теперь по поводу "NaN не равен NaN". Утверждение "NaN не равен NaN" звучит логично, как и "не-суслик не равен не-суслику". Очевидно, что первый не-суслик мог быть шкафом, а второй не-суслик -- инопланетным существом. Поэтому они и не равны. Было бы очень странно, если бы все-таки NaN был всегда равен NaN. Если же хочется проверить, является ли нечто наном -- делаешь isNaN(нечто).

Все твои претензии высосаны из пальца и теряют всякий смысл при более близком рассмотрении вопросов.

Ответить | Правка | Наверх | Cообщить модератору

24. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от You Might Not Need jQuery (?), 02-Окт-16, 01:36 
Генератор костылей прибежал
Ответить | Правка | Наверх | Cообщить модератору

30. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +5 +/
Сообщение от Ilya Indigo (ok), 02-Окт-16, 02:38 
> Генератор костылей прибежал

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

Ответить | Правка | Наверх | Cообщить модератору

86. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Вареник (?), 10-Окт-16, 05:54 
>> Генератор костылей прибежал
> Ты бы его послушал. Он как раз очень понятным и простым языком
> объясняет умные, хоть и тривиальные вещи, которые должны быть понятны даже
> школьнику.

Нам нужна работающая программа, а не понимание почему она глючит.

Ответить | Правка | Наверх | Cообщить модератору

25. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +1 +/
Сообщение от Аноним (-), 02-Окт-16, 01:45 
Иллюзия нормальности.
Null это и так "отсутствие значения" и городить undefined не нужно - лишщнее это.

"NaN не равен NaN" спорное утверждение. К примеру нам надо выяснить а "находятся ли переменные в одинаковом состоянии?" и простым сравнением не отделаешся, нужно городить хитрое выражение, реализующий отдельный тип эквивалентности.

NaN тоже лишнее - особое обозначение отсутствия значения, вполне можно обойтись null.

Скольский путь многозначной логики до добра не доводит, а порождает лишь путаницу.

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

28. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +3 +/
Сообщение от Аноним (-), 02-Окт-16, 02:07 
> Null это и так "отсутствие значения"

Ты правильно сделал, что взял в кавычки. Потому что подлинным отсутствием значения является, как подсказывает даже англо-русский словарь, undefined. Аналогия из доступного тебе мира:

1) Когда перед тобой белый лист бумаги -- это undefined. На этом листе теоретически может быть все, что угодно: рисунок, рассказ и т. д.
2) После того, как ты вывел на бумаге строчку "Номер и серия паспорта: ________" -- это null. То есть ссылка на другой документ (объект), который пока что никуда не указывает. Одновременно с этим уже исключается присутствие на листе рисунка или рассказа (в рамках данной аналогии), поэтому это уже не undefined.
3) Когда ты впишешь реальный номер и серию паспорта -- это уже будет заполненной ссылкой. Это теперь уже объект. (В JavaScript всегда работают со ссылками, а не с непосредственно объектами.)

Отличаешь ли ты первую ситуацию от второй?

> нам надо выяснить а "находятся ли переменные в одинаковом состоянии?"

Ну так "одинаковое состояние" -- слишком размытое понятие, чтобы уложиться в простейший оператор сравнения. Будут ли обладать одинаковым состоянием строка "привет мир" и результат деления 0 на 0? Для кого-то да, а для кого-то и нет. Для кого-то еще одним требованием к "одинаковому состоянию" будет еще и то, чтобы обе переменные имели один и тот же тип: в нашем случае:

typeof "привет мир"; // => 'string'
typeof (0 / 0); // => 'number'

isNaN("привет мир"); // => true -- потому что "привет мир" действительно не является числом :)
Number.isNaN("привет мир"); // => false -- потому что "привет мир" не имеет типа 'number'

И как ты уместишь это в простейший оператор сравнения?

Ответить | Правка | Наверх | Cообщить модератору

31. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Ilya Indigo (ok), 02-Окт-16, 03:05 
С кое чем не согласен.
> 1) Когда перед тобой белый лист бумаги -- это undefined.

0) Когда перед вами пустой стол или пустота, это, выходит, тоже underfined?
Состояние 0 и состояния 1 неотличимы?
> 2) После того, как ты вывел на бумаге строчку "Номер и серия паспорта: ________" -- это null

Для этого отдельно null не нужен, это можно сделать, как я и делаю, что бы не путаться в типах, пустым объектом {}.

Итого мне кажется, что правильнее было бы
0) underfined, при этом это было бы запрещённое значение, которое выдавало бы ошибку при попытке чтения из не инициализированной переменной, как в PHP.
1) null переменная инициализирована и доступна для чтения.
2) {},0,'',/,false в переменную занесено пустое значение, при этом анализатору типов сообщается о том, какой тип этой переменной для более оптимального выделения памяти.
3) В переменную занесено значение.

Не исключаю, что я что-то мог упустить и/или не понять.

Ответить | Правка | Наверх | Cообщить модератору

33. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +2 +/
Сообщение от Crazy Alex (??), 02-Окт-16, 04:33 
Сказал бы скромненько что наличие и поведение NaN - результат следования IEEE 754 и не морочил бы голову. И в чём великое различие null и undefined, если и то, и другое - единственное значение в отдельном типе? Это не пропущенная графа для номера паспорта - потому что null не несёт относительно undefined никакой новой информации.

А потом, не включая голову, пишут то, что выше - ну вот для
"var myValue = myObject.myKey | 0;" что будет, если значением была пустая строка? Правильно, она тихо-незаметно превратились в 0. Иногда годится, а иногда - и нет. А всё потому, что нет понимания разницы между отсутствием значения и его вычислением в false. А вот первая запись - громоздка (но это уже к разработчикам языка, можно и синтаксис сделать на подобные случаи), но корректна.

Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

40. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +1 +/
Сообщение от Аноним (-), 02-Окт-16, 12:00 
>Потому что подлинным отсутствием значения является, как подсказывает даже англо-русский словарь, undefine

Язык программирования имеет мало отношения к естественному языку.

>Отличаешь ли ты первую ситуацию от второй?

Аналогия сильно хромает. Есть пустые значения в широком смысле 0,"",{},[] и т.п. Аналогия с номером паспорта из этой же оперы.
undefined и null искуственное разделение отсутствия значения вследствии отсутсвия инициализации и явного определения отсутсвия значения. Типа, чтобы программист мог эти моменты различить, но никому это не нужно.

>Ну так "одинаковое состояние" -- слишком размытое понятие, чтобы уложиться в простейший оператор сравнения

Это следствие многозначной логики в языке. Поэтому многозначная логика в ЯП - вредно.

>И как ты уместишь это в простейший оператор сравнения?

Решать подобные проблемы за счет введения NaN не очень умно со стороны создателей языке. Если есть сомнения - надо проверять операнды, а не результат 0/0

Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

29. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –1 +/
Сообщение от Ilya Indigo (ok), 02-Окт-16, 02:32 
В PHP тоже своих костылей хватает, например ('1st' == 1) true, так как только для автоприведения типов PHP число приоритетнее строки, и PHP именно строку переводит в число при простом сравнении.
Вы скажете, так используй только строгое сравнение (===). Так это ещё костыльнее, так как данные из инпутов всегда приходят как строки, и при строгом сравнении не совпадут с проверкой на >== 0
А также функции определения позиций, которые при наличии совпадения возвращают целое натуральное число, включая 0, а при отсутствии совпадения с какого-то перепугу логическое false вместо логичного -1.
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

32. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Crazy Alex (??), 02-Окт-16, 04:20 
Ну и на кой ты сюда этого образцового урода приплёл? ЧТо PHP из костылей состоит примерно полностью и так все знают.
Ответить | Правка | Наверх | Cообщить модератору

34. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –1 +/
Сообщение от Ilya Indigo (ok), 02-Окт-16, 04:35 
> Ну и на кой ты сюда этого образцового урода приплёл? ЧТо PHP
> из костылей состоит примерно полностью и так все знают.

Приплёл его не я, а Аноним, которого я комментировал.
И как видите, не все.

Ответить | Правка | Наверх | Cообщить модератору

41. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Аноним (-), 02-Окт-16, 12:03 
> В PHP тоже своих костылей хватает, например ('1st' == 1) true, так

...
>Приплёл его не я, а Аноним, которого я комментировал. И как видите, не все.

При чем тут PHP? Прочитал свое сообщение еще раз, но не увидел и намека на PHP.

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

55. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Ан (??), 02-Окт-16, 16:27 
>Вы скажете, так используй только строгое сравнение (===). Так это ещё костыльнее, так как данные из инпутов всегда приходят как строки, и при строгом сравнении не совпадут с проверкой на >== 0

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

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

42. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –2 +/
Сообщение от anonymous (??), 02-Окт-16, 13:05 
>Теперь по поводу "NaN не равен NaN".

что-же тогда false != false например? не нужно оправдывать бред ok?

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

43. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –2 +/
Сообщение от anonymous (??), 02-Окт-16, 13:08 
>>Теперь по поводу "NaN не равен NaN".
> что-же тогда false != false например? не нужно оправдывать бред ok?

имеется ввиду что-ж раз "NaN не равен NaN" то нет такого что "false не равен false"?

Ответить | Правка | Наверх | Cообщить модератору

58. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +1 +/
Сообщение от Ilya Indigo (ok), 02-Окт-16, 19:08 
>>Теперь по поводу "NaN не равен NaN".
> что-же тогда false != false например? не нужно оправдывать бред ok?

Бред сивой кобылы и тупическую невнимательность демонстрируете сейчас Вы.
true и false это единственные и допустимые значения типа boolean. Элементарная булева алгебра, всё что не истина ложь, всё что не лож - истина. Из этого и ежу понятно, что false != false (true) (Один человек не женского пола того же пола, которого и другой человек не женского пола, потому что кроме женского и мужского полов у людей не существует.)

NaN - это недопустимой числовой значение, сообщающее об ошибке. Оно может возникнуть и при делении на нуль, и при умножении на строку, и в куче других арифметических операциях.
По вашему 8/0 == 5*'jjj' должно выдавать истину?

Другой вопрос, что NaN, как и underfined костыли JS, и по-хорошему их вообще быть не должно, и при попытках чтения из не инициализированных переменных, как и при ошибках арифметических операций интерпретатор должен останавливаться, сообщая об ошибке и не присваивать никаких ненужных спорных типов.

НО в JS решили так, и в рамках этого решения всё правильно и логично. NaN - это ошибка, и перед сравнением нужно проверять корректность данных, как и во всех нормальных ЯП, и оператор сравнение этим заниматься не должен.

Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

60. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  –2 +/
Сообщение от anonymous (??), 02-Окт-16, 22:41 
что бы ты знал милок в pure С например есть FALSE и есть TRUE. С FALSE некую переменную сравнивать можно, а вот с TRUE глупо ибо может не совпасть ибо определено как 1 а по факту все что не FALSE. вообщем включай мозг и развивай кругозор а не оправдывай уродство JS
Ответить | Правка | Наверх | Cообщить модератору

69. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +1 +/
Сообщение от Аноним (-), 03-Окт-16, 12:25 
> что бы ты знал милок в pure С например есть FALSE и
> есть TRUE. С FALSE некую переменную сравнивать можно, а вот с
> TRUE глупо ибо может не совпасть ибо определено как 1 а
> по факту все что не FALSE. вообщем включай мозг и развивай
> кругозор а не оправдывай уродство JS

Зачем приводить в пример "не удачное" решение?

Ответить | Правка | Наверх | Cообщить модератору

63. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +1 +/
Сообщение от Какаянахренразница (ok), 03-Окт-16, 06:10 
> Из этого и ежу понятно, что false != false (true)

По-моему, у ежа проблема с логикой.

Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

64. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Ilya Indigo (ok), 03-Окт-16, 06:19 
>> Из этого и ежу понятно, что false != false (true)
> По-моему, у ежа проблема с логикой.

Извиняюсь, запутался, конечно же, false == false (true).

Ответить | Правка | Наверх | Cообщить модератору

65. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Какаянахренразница (ok), 03-Окт-16, 06:42 
ОК, теперь моему ежу тоже понятно.
Ответить | Правка | Наверх | Cообщить модератору

79. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Крутомен (?), 04-Окт-16, 07:16 
>По вашему 8/0 == 5*'jjj' должно выдавать истину?

Должна быть остановка выполнения скрипта с диагностикой

Ответить | Правка | К родителю #58 | Наверх | Cообщить модератору

54. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Ан (??), 02-Окт-16, 16:17 
>var myObject = null;
>typeof myObject; // => 'object' -- все правильно, так как myObject используется как ссылка на объект, хоть ссылка и пустая

Это ошибка дизайна которую пытались исправить, но не смогли потому что ломаются сайты при этом. http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

80. "Релиз pgAdmin 4 1.0, интерфейса для управления СУБД PostgreS..."  +/
Сообщение от Крутомен (?), 04-Окт-16, 07:17 
В html подобный переход решили за счет "квирк мода" и доктайпа с нужной версией
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру