<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - Forastero</title>
		<link>https://www.cyberforum.ru/blogs/378270/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Sat, 22 Aug 2026 00:38:01 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - Forastero</title>
			<link>https://www.cyberforum.ru/blogs/378270/</link>
		</image>
		<item>
			<title>Нотация Йоды</title>
			<link>https://www.cyberforum.ru/blogs/378270/2403.html</link>
			<pubDate>Fri, 30 May 2014 14:05:45 GMT</pubDate>
			<description>*Условия Йоды* (от англ. Yoda conditions), или *нотация Йоды* (англ. Yoda notation) в жаргоне...</description>
			<content:encoded><![CDATA[<div><b>Условия Йоды</b> (<i>от англ. Yoda conditions</i>), или <b>нотация Йоды</b> (<i>англ. Yoda notation</i>) в жаргоне программистов — «безопасный» стиль записи выражений сравнения при программировании на языках с Си-синтаксисом, заключающийся в написании сначала значения переменной и только затем самой переменной. Такая запись позволяет обнаружить на этапе компиляции и исправить ошибку, свойственную данным языкам — операцию присваивания =, по ошибке записанную вместо операции сравнения «==».<br />
<br />
Назван в честь магистра Йоды из вселенной «Звёздных войн», имеющего манеру выстраивать слова фразы в обратном порядке.<br />
<br />
<b>Суть нотации</b><br />
В классической нотации проверка переменной на равенство некоторой константе записывается следующим образом (пример на языке PHP):<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="394851961"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="394851961" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$variable</span> <span class="sy0">==</span> <span class="nu0">52</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> 
&nbsp; &nbsp; <span class="coMULTI">/* действия, выполняемые если переменная равна 52 */</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>то есть переменная, операция сравнения и константа. Данная конструкция уязвима для известной ошибки:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="909750528"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="909750528" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$variable</span> <span class="sy0">=</span> <span class="nu0">52</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// ОШИБКА: ПРИСВАИВАНИЕ переменной значения 52</span>
&nbsp; &nbsp; <span class="coMULTI">/* действия, выполняемые ВСЕГДА */</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Такой код остается синтаксически правильным, и при ненадлежащем тестировании может остаться в программе на долгие годы и стать причиной серьёзной уязвимости.<br />
При использовании нотации Йоды переменная и константа меняются местами, так что константа оказывается слева:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="34810661"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="34810661" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="nu0">52</span> <span class="sy0">==</span> <span class="re0">$variable</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="coMULTI">/* действия, выполняемые если переменная равна 52 */</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>При такой нотации в случае опечатки в операторе сравнения получается синтаксически некорректное присваивание константе и программа не будет работать, пока ошибка не будет найдена и исправлена.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="385872814"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="385872814" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <span class="nu0">52</span> <span class="sy0">=</span> <span class="re0">$variable</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// ОШИБКА при компиляции</span>
&nbsp; &nbsp; <span class="coMULTI">/* ... */</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Источник: Википедия</div>

]]></content:encoded>
			<dc:creator>Forastero</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/378270/2403.html</guid>
		</item>
	</channel>
</rss>
