| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Троичная логика и двоичная логика
			 
			
			Добрый день! 
		
		
		
		
		
		
		
	Горю возмущением! ![]() В последнее время при определении переменных-флагов не хватает значений да-нет, разрешено-запрещено, необходимо ещё значение "не определено". Поэтому использую (0,1,2) - не определено, разрешено, запрещено. А коллега на ревью не соглашается. Насколько я знаю, есть троичная логика, даже троичный компьютер. С двумя вариантами (и булевой переменной) алгоритм или излишне сложный (я так и не додумала..), или , на мой взгляд, не надежный. Коллеги, есть опыт? Поделите, пожалуйста, мнениями! А то сгорю дотла  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			в MS Access гаечка закрашивалась сереньким, если не определена. 
		
		
		
		
		
		
		
	а так - опшн вам в помощь: <пусто>,Да,Нет  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mira (1). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Санчо, вопрос  у коллеги не к типу данных (опшен, целое). 
		
		
		
		
		
		
		
	Вопрос в том - что незя! Надо сделать алгоритм, чтобы было "да" и "нет" и поэтому булева переменная. Я математик по образованию, а не ит-шник. Может в новых языках каких-то есть конструкции с троичной логикой и можно почитать обоснование, в каких ситуациях можно использовать троичную логику? Питон, какой-нибудь? То, что, побарахтавшись в логике "да-нет", перешла к "не определено- да-нет", не аргумент. Мне и самой хочется понять, когда ситуация сводится к да-нет, а когда к не определено-да-нет. Во имя воспитания точности мышления. Человечья логика хитрая вещь, поэтому хочется не перекричать (и не убить ..ой, убила бы этих гнусных ревьюеров), а раз и на всегда разобраться.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Выпускник Бауманки : "Алгоритм по схеме "да-нет-или" ветвится быстрее, чем  просто по дихотомии да-нет" 
		
		
		
		
		
		
		
	Подробнее пока у него нет времени мне рассказывать. Может потом скажут, где почитать..  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			погуглила, есть описательные статьи на эту тему 
		
		
		
		
		
		
		
	«Лишняя» переменная Недвухзначность логики восходит к основоположнику первой законченной логической теории — Аристотелю, который между утверждением и антиутверждением помещал третье «привходящее» — «может да, а может нет». В последующем развитии логика была упрощена за счет отказа от этого третьего состояния и в таком виде оказалась необычайно живучей, несмотря на свое несоответствие нечеткой, не всегда раскладывающейся на «да» и «нет» действительности. В разные века «расширить» логику пытались Оккам, Лейбниц, Гегель, Кэрролл и некоторые другие мыслители, в конечном же виде трехзначную логику разработал в начале XX века польский ученый Ян Лукасевич." "Двухзначная математическая логика, которая повсеместно царит в мире компьютерной и прочей «интеллектуальной» техники, по мнению создателя троичного компьютера Николая Брусенцова, не соответствует здравому смыслу: «закон исключенного третьего» отрезает иные заключения, кроме «истины» и «не-истины», а между тем процесс познания реальности человеком отнюдь не сводится к дихотомии «да/нет». Поэтому, утверждает Брусенцов, чтобы стать интеллектуальным, компьютеру следует быть троичным."  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			NULL, кстати,  в  sql
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			"В двоичной логике возможны парадоксы, а в троичной нет.  
		
		
		
		
		
		
		
	Замечу, шины у компьютера троичные. Еще в троичной логике нет ошибок округления"  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Но как-то это отрывается от темы NAV: Программирование?  
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Sancho (1). | |
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			не только в SQL. Почитайте про nullable типы (https://docs.microsoft.com/ru-ru/dot...le-value-types) 
		
		
		
		
		
		
		
		
			Цитата: 
	
Но не всем это нравится вот например https://habr.com/ru/post/309462/ Моё мнение - в чужой монастырь со своим уставом... лучше не надо. При разработке в любой системе стоит придерживаться правил этой системы. Под системой можно понимать как конкретный фреймворк или среду разработки, так и в целом инфраструктуру и сообщество специалистов разрабатывающих продукт. Если от какого-то нововведения вам лично станет хорошо, а в целом системе не очень, то выгода будет сомнительна. Думайте не только об эффективности создания алгоритма но и о поддержке его в будущем. Вы же разрабатывате не разовый скрипт а продукт у которого в перспективе будет сколько-нибудь продолжительный жизненный цикл? Кстати а как вы относитесь к тому что в аксапте нет NULL в значениях табличных полей? Последний раз редактировалось S.Kuskov; 05.03.2020 в 17:44.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mira (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			S.Kuskov, большое спасибо!  
		
		
		
		
		
		
		
	  Я всё почитаю. Тем более, вернула ревьюеру вопрос: для моего варианта - одна переменная Integer - я возвращаю параметр из процедуры g_bool_Editable := l_cu_хх.SetTo; это просто; в его варианте - две логические переменные - g_bool_IsInitialized придется передавать параметром в процедуру SetTo. А как иначе?    (все это в OnAfterGetRecord).И повод подумать над "гранями" null, и о троичной логике. Цитата: 
	
 , остающуюся от  поколений  разработчиков.Меня послали в курилку. По размышлении : этот раздел не вообще о программировании в Наве, а технические аспекты Нава? Хорошо.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Имхо, надежность кода вызывает вопроса. Пишут оптимисты, которых пофиг, что там в данных. Видит качество данных только разработчик sql. И вот ему не позавидуешь. Логика интерфейсов в Наве скрывает ошибки, иначе пользователи сообщают. А разработчику sql приходится потрудиться, чтобы исхитриться написать условия и из данных+мусор выделить для RS отчетов чистые данные. Это тааакой итерационный процесс с вопросами юзеров : а что это? а это зачем? а это откуда? Может, я мудрю. Но привыкла отвечать за качество кода. Отсюда и мои вопросы.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В книге Сергея Моисеенко есть параграф "Трехзначная логика и предложение WHERE"  
		
		
		
		
		
		
		
	![]() Как раз те нюансы, которые когда-то были не понятны. А теперь ![]() p.s. Трехзначную логику в алгоритм в итоге вернула  
		 | 
| 
	
 |