> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00300/00100/000104.-blochnye-konstrukcii.-usloviya.md).

# 000104. Блочные конструкции. Условия

Блочные конструкции. Условия|Всем привет! Мы продолжаем изучать C#. А точнее не сам C#, а скриптинг GTA 4 с помощью этого языка програмированния.|wmysterio|wmysterio||||Сегодня мы рассмотрим блочную конструкцию, являющейся условием. Как уже звучало ранее, блочные конструкции содержат код внутри фигурных скобок **{** и **}**. К таким блочным конструкциям относятся условия. Синтаксис написания прост:

```
cs
if ( УСЛОВИЯ ) {
 // действия
}
```

Само условие в основном содержит [операторы отношения](https://github.com/wmysterio/scm-scripting-lessons/blob/main/publ/gta_iv/script_lessons/tipy_dannykh_v_csharpe_operacii_nad_nimi/35-1-0-160/README.md) выражений. Также сюда можно отнести функции, возвращающие тип "bool". Вот самый простой пример:

<table><thead><tr><th>C#</th><th>Аналог в Sanny Builder</th></tr></thead><tbody><tr><td><p>```</p><p>cs using System; using GTA;</p><p>namespace TestScript {</p><p>public class Thread : Script {</p><p>public Thread() {</p><p>int a = 0; if ( a == 0 ) { // действия }</p><p>}</p><p>}</p><p>}</p><pre><code>&#x3C;/td>&#x3C;td>
</code></pre><p>{$Cleo} 0000:</p><p>thread 'Thread'</p><p>0@ = 0 if 0@ == 0 then // действия end</p><p>0A93: end_custom_thread</p><pre><code>&#x3C;/td>&#x3C;/tr>
&#x3C;/tbody>&#x3C;/table>

Это одиночное условие конструкции **if...then...end**. Чтобы организовать код **jf @Label1** с SannyBuilder-а, нужно использовать следующий код:

\<table class="table table-bordered">\<tbody>
\<tr>\<th>C#\</th>\<th>Аналог в Sanny Builder\</th>\</tr>
\<tr>\<td> </code></pre><p>cs using System; using GTA;</p><p>namespace TestScript { public class Thread : Script {</p><p>public Thread() { int a = 0;</p><p>Label1: Wait(0);</p><p>if ( a != 0 ) { goto Label1; }</p><p>} } }</p><pre><code>\</td>\<td> </code></pre><p>{$Cleo} 0000:</p><p>thread 'Thread' 0@ = 0</p><p>:Label1 wait 0</p><p>if 0@ == 0 jf @Label1</p><p>0A93: end\_custom\_thread</p><pre><code>\</td>\</tr>
\</tbody>\</table>

Как и SB, существуют ещё несколько типов условий. Одной из них есть конструкция **if...then...else...end**. В C# она имеет следующий вид:

\<table class="table table-bordered">\<tbody>
\<tr>\<th>C#\</th>\<th>Аналог в Sanny Builder\</th>\</tr>
\<tr>\<td> </code></pre><p>cs int a = 5;</p><p>if ( a == 0 ) { a += 1; } else { a += 10; }</p><pre><code>\</td>\<td> </code></pre><p>0@ = 5</p><p>if 0@ == 0 then 0@ += 1 else 0@ += 10 end</p><pre><code>\</td>\</tr>
\</tbody>\</table>

Хочу ещё рассказать о "типах" условий. Как вы помните, в Санни Билдер существуют проверки на истину нескольких выражений ( **or** и **and** ). C# предоставляет также такую возможность. Синтаксис написания таков:

\<table class="table table-bordered">\<tbody>
\<tr>\<th>Тип\</th>\<th>C#\</th>\<th>Аналог в SannyBuilder\</th>\</tr>
\<tr>\<td>or\</td>\<td> </code></pre><p>cs if ( a == 0 || a == 1 || a == 3) { a += 1; }</p><pre><code>\</td>\<td> </code></pre><p>if OR 0@ == 0 0@ == 1 0@ == 3 then 0@ += 1 end</p><pre><code>\</td>\</tr>
\<tr>\<td>and\</td>\<td> </code></pre><p>cs if ( a == 0 && a == 1 && a == 3) { a += 1; }</p><pre><code>\</td>\<td> </code></pre><p>if AND 0@ == 0 0@ == 1 0@ == 3 then 0@ += 1 end</p><pre><code>\</td>\</tr>
\</tbody>\</table>

Главные отличия Вы заметили. Плюсы Санни Билдер в том, что мы перечисляем все условия, написав тип "or ( and )" один раз, в то время как в c# нам постоянно нужно вводить неудобные символы **&&** или **||** между условиями. Плюс шарпа в том, что он не ограничен в количестве самих условий. Можем написать хоть сто условий :) Кроме этого, мы можем комбинировать их, в зависимости от ситуации. К тому-же код c# не такой громоздкий, как со сравниваемым с ним SannyBuilder. Мы, конечно, могли написать и так:

</code></pre><p>cs if ( a == 0 && a == 1 && a == 3 ) { a += 1; }</p><pre><code>

Никакой разницы не будет. Компилятор поймёт это без проблем! Это удобно, когда есть куча условий, но их видимость в одной строке ограничивается. Какой вариант лучше, такой и используйте :)

На этом об условиях всё. Галопом прошлись по ним. Принцип работы остался прежним. Если уж совсем напряг, то почитайте более подробные статьи в интеренете. Я уже хочу побыстрее перейти к обычному режиму уроков. А учить весь C# нам нет необходимости :)|670|1|0||blochnye\_konstrukcii\_uslovija|1511774783 </code></pre></td><td></td></tr></tbody></table>
