# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000104.-blochnye-konstrukcii.-usloviya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
