Сетевые настройки CS:GO
- net_channels 0 — отобразить информацию о канале в консоли (та же самая информация что и у команды net_graph);
- net_graph 1 — включить панель информации о соединении;
- net_graphheight 40 — высота net_graph панели;
- net_graphmsecs 400 — изменения скорости обновления блока;
- net_graphpos 1 — место положение net_graphа;
- net_graphproportionalfont 0.5 — размер net_graph;
- net_graphshowinterp 1 — показывает строку интерполяции;
- net_graphshowlatency 1 — рисует график Ping и пакетов;
- net_graphsolid 1 — выключить прозрачность лагомера;
- net_graphtext 1 — включить текст в блоке;
- net_maxroutable 1260 — максимальная фрагментация в байтах на пакет;
- net_scale 5 — размер графика;
- option_duck_method 0 — удерживать/одиночное нажатие клавишу приседания;
- option_speed_method 0 — удерживать/одиночное нажатие клавишу бега;
- rate 30000 — количество байтов, которые клиент может получить от сервера за секунду.
Как включить меню разработчиков
Для начала нам потребуется включить меню разработчиков. Я слышал, что некоторые производители не скрывают его от пользователей, но на большинстве устройств под управлением Android ему требуется ручная активация:
- Перейдите в «Настройки» смартфона и пролистайте вниз;
- Откройте раздел «О телефоне» и найдите пункт «Номер сборки»;
Большинство смартфонов требует, чтобы меню разработчиков активировали вручную
- Быстро-быстро нажимайте на «Номер сборки» до тех пор, пока не появится надпись «Вы разработчик»;
- Подтвердите переход в новый статус, если система это потребует.
Как попасть в меню разработчика
Не включайте это меню и не исследуйте его, если считаете, что не готовы
С этого момента в «Настройках» появится дополнительный пункт под названием «Для разработчиков». Опять же его расположение может меняться в зависимости от прошивки, на базе которой работает ваш смартфон. На многих устройствах новый пункт появляется прямо в общем списке, под вкладкой «О телефоне». Однако на аппаратах Huawei и Honor, к примеру, его скрывают более тщательно. Если у вас смартфон от этих брендов, можете найти меню разработчиков через поиск или в разделе «Система и обновление».
Для рядового пользователя в меню разработчиков, на первый взгляд, нет ничего интересного. Мало того, что большинство параметров, которые там представлены, не переведены на русский язык, так ещё и используют в основном совершенно незнакомые термины вроде WebView, «мониторинг HCI», рендеринг и т.д. Однако есть и вполне привычные. Я отобрал для вас список самых востребованных функций, которые могут пригодиться ну практически каждому. А уж что из этого использовать, решать только вам.
Список глаголов, требующих после себя инфинитив
- to agree – соглашаться
- to aim – намереваться, пытаться
- to appear – оказаться
- to arrange – договариваться
- to ask – просить
- to attempt – попытаться
- to be able – быть в состоянии, мочь
- to beg – просить, умолять
- to begin – начинать
- to care – хотеть, иметь желание
- to choose – выбирать
- to claim – заявлять, утверждать
- to dare – решаться, иметь смелость
- to decide – решить
- to demand – требовать
- to deserve – заслуживать
- to dread – бояться, страшиться
- to expect – ожидать
- to fail – не сбываться, не сделать, не смочь
- to get – получить разрешение
- to happen – оказаться, случатся
- to hesitate – не решаться
- to hope – надеяться
- to hurry – поспешить
- to intend – намереваться
- to learn – учиться
- to manage – смочь, справляться
- to need – нуждаться
- to neglect – забывать, не сделать чего-то
- to plan – планировать
- to prepare – приготовиться
- to pretend – делать вид, притворяться
- to proceed – перейти к, начать делать что-то после чего-то
- to promise – обещать
- to refuse – отказываться
- to seem – казаться
- to strive – пытаться, прилагать усилия
- to swear – клясться
- to tend – иметь склонность, тяготеть
- to threaten – угрожать, запугивать
- to vow – давать клятву
- to wait – ждать
- to want – хотеть
- to wish – хотеть, желать
Еще не устали? На курсах подготовки к ОГЭ по английскому языку можно повторить грамматику в увлекательной форме вместе с преподавателем.
Формы глагола to be в будущем
Тут все совсем просто: в современном английском языке у глагола to be в будущем времени есть только одна форма — will.
Наверняка из школьных уроков вы помните, что «глагол ту би», как мы его называли, в будущем времени имеет две формы: shall с I (я) и We (мы) и will со всеми остальными. Забудьте это! На самом деле в современном английском языке со всеми местоимениями используется только will.
Когда-то все действительно было так, как описывалось в советских учебниках английского. В «Алисе в Стране Чудес», написанной в 1862 году, Белый Кролик восклицает Oh dear! I shall be late! (Боже мой! Я опоздаю!).
Но уже во времена Великого Гэтсби почти никто не говорил I shall go to the dentist tomorrow («Завтра я пойду к дантисту»). Уже лет сто с любыми местоимениями в будущем времени используется will, и точка.
Впрочем, shall не исчезло из языка совсем. Но теперь у него иное значение. Shall используют, когда хотят предложить что-то или помочь. Например, Shall we go? (Ну что, пойдем?) или Shall I shut the window? (Закрыть окно?). Можно добавить shall в конце вопросительного предложения, чтобы подчеркнуть свое нетерпение и даже раздражение: Let’s just do it, shall we? (Давайте просто сделаем это, ладно?) Но для выражения будущего времени форма shall определенно устарела.
Вот несколько примеров, как использовать глагол to be в будущем времени и построить предложение:
Verb to be в будущем времени |
|
Я встречусь с моим врачом завтра Наш менеджер вам перезвонит Эта таблетка тебе поможет Инга поедет в Лондон этим летом Илон Маск скоро создаст машину времени Ты сдашь экзамен Меган и Гарри будут в Сан Диего на этих выходных |
I will meet my doctor tomorrow Our manager will call you back This pill will help you Inga will go to London this summer Elon Musk will create a time machine soon You will pass the test Megan and Harry will be in San Diego this weekend |
Передача функции другой функции в Golang
Переменные могут отсылаться к функциям, а также передаваться функциям. Это значит, что Go допускает передачу одних функций другим.
Для фиксирования данных о температуре каждую секунду в Листинге 2 объявляется новая функция , что принимает функцию сенсора в качестве параметра. Она периодически вызывает функцию сенсора, будь то или .
Возможность передачи функций представляет собой мощный способ, что позволяет поделить код на части. Без учета функций первого класса вы бы наверняка пришли к функциям и , что содержат идентичный код.
Листинг 2
Go
package main
import (
«fmt»
«math/rand»
«time»
)
type kelvin float64
func measureTemperature(samples int, sensor func() kelvin) { // measureTemperature принимает функцию в качестве второго параметра
for i := 0; i < samples; i++ {
k := sensor()
fmt.Printf(«%v° K\n», k)
time.Sleep(time.Second)
}
}
func fakeSensor() kelvin {
return kelvin(rand.Intn(151) + 150)
}
func main() {
measureTemperature(3, fakeSensor) // Передает название функции другой функции
}
1 |
packagemain import( «fmt» «math/rand» «time» ) typekelvin float64 funcmeasureTemperature(samples int,sensor func()kelvin){// measureTemperature принимает функцию в качестве второго параметра fori=;i<samples;i++{ k=sensor() fmt.Printf(«%v° K\n»,k) time.Sleep(time.Second) } } funcfakeSensor()kelvin{ returnkelvin(rand.Intn(151)+150) } funcmain(){ measureTemperature(3,fakeSensor)// Передает название функции другой функции } |
Функция принимает два параметра, второй параметр принадлежит к типу . Объявление выглядит как того же типа:
Go
var sensor func() kelvin
1 | varsensor func()kelvin |
Функция может передать название функции к .
Вопрос для проверки:
В чем преимущество передачи функции другой функции?
Формы глагола to be в настоящем
Спряжение to be — один из краеугольных камней английской грамматики. Настоящее время используется чаще прочих, поэтому с него и начнем.
В настоящем у глагола to be есть целых три формы: am, is и are.
Am используется с I (Я). Is — c he (он), she (она), it (оно). Аre — с местоимениями we (мы), they (они) и you, которое в английском может означать «ты», вежливое «вы» и «вы» при обращении к группе людей.
Если хотите запомнить формы to be — таблица вам в помощь:
Вот как это выглядит на практике:
Verb to be в настоящем времени |
|
Гульнара – доктор. Мы заняты. Мои друзья путешествуют. Это ясно. Твой кот очень толстый. Эти вопросы – спорные Я готов. |
Gülnara is a doctor. We are busy. My friends are traveling. It is clear. Your cat is very fat. These issues are controversial. I am ready. |
Чтобы сэкономить время, англичане и американцы часто сокращают am, is и are:
- I am → I’m
- He is → He’s
- She is → She’s
- It is → It’s
- You are → You’re
- We are → We’re
- They are → They’re
Кстати, когда-то давно глагол «быть» использовали в русском так же, как и в английском. Помните фразу «Аз есмь царь»? Во времена Ивана Грозного это «есмь» служило по смыслу тем же to be в английском сегодня.
Циклы
Последнее обновление: 20.12.2017
Циклы позволяют в зависимости от определенного условия выполнять некоторые действия множество раз. Фактически в Go есть только один цикл — цикл for,
который может принимать разные формы. Этот цикл имеет следующее формальное определение:
for ; ; { // действия }
Например, выведем с помощью цикла квадраты чисел:
package main import "fmt" func main() { for i := 1; i < 10; i++{ fmt.Println(i * i) } }
Объявление цикла for разбивается на три части. Вначале идет инициализация счетчика: . Фактически она представляет
объявление переменной, которая будет использоваться внутри цикла. В данном случае это счетчик i, начальное значение которого равно 1.
Вторая часть представляет условие: . Пока это условие истинно, то есть возвращает true, будет продолжаться цикл.
Третья часть представляет изменение (увеличение) счетчика на единицу.
В теле цикла на консоль выводится квадрат числа i.
Таким образом, цикл сработает 9 раз, пока значение i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждый отдельный проход цикла называется
итерацией. То есть в данном случае будет 9 итераций. В итоге мы получим следующий консольный вывод:
1 4 9 16 25 36 49 64 81
Нам необязательно указывать все условия при объявлении цикла. Например, можно вынести объявление переменной вовне:
var i = 1 for ; i < 10; i++{ fmt.Println(i * i) }
Можно убрать изменение счетчика в само тело цикла и оставить только условие:
var i = 1 for ; i < 10;{ fmt.Println(i * i) i++ }
Если цикл использует только условие, то его можно сократить следующим образом:
var i = 1 for i < 10{ fmt.Println(i * i) i++ }
Вложенные циклы
Циклы могут быть вложенными, то есть располагаться внутри других циклов. Например, выведем на консоль таблицу умножения:
package main import "fmt" func main() { for i := 1; i < 10; i++{ for j := 1; j < 10; j++{ fmt.Print(i * j, "\t") } fmt.Println() } }
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Перебор массивов
Для перебора массивов можно использовать следующую форму цикла for:
for индекс, значение := range массив{ // действия }
При переборе мы можем по отдельности получить индекс элемента в массиве и значение этого элемента. Например, перебирем массив строк:
var users = string{"Tom", "Alice", "Kate"} for index, value := range users{ fmt.Println(index, value) }
Консольный вывод:
0 Tom 1 Alice 2 Kate
Если мы не планируем использовать значения или индексы элементов, то мы можем вместо них указать прочерк. Например, нам не нужны индексы:
for _, value := range users{ fmt.Println(value) }
Но также для перебора массива можно использовать и стандартную версию цикла for:
var users = string{"Tom", "Alice", "Kate"} for i:= 0; i < len(users); i++{ fmt.Println(users) }
В данном случае счетчик i играет роль индекса. Цикл выполняется, пока счетчик i не станет равным длине массива, которую можно получить с помощью
функции len()
Операторы break и continue
Может возникнуть ситуация, когда нам надо при определенных условиях завершить текущую итерацию цикла, не выполнять все инструкции цикла, а
сразу перейти к следующей итерации. В этом случае можно использовать оператор continue. Например, в массиве могу быть, как положительные, так и отрицательные числа.
Допустим, нам нужна сумма только положительных чисел, поэтому, если нам встретится отрицательное число, мы можем просто перейти к следующей итерации с помощью continue:
var numbers = int{1, -2, 3, -4, 5, -6, -7, 8, -9, 10} var sum = 0 for _, value := range numbers{ if value < 0{ continue // переходим к следующей итерации } sum += value } fmt.Println("Sum:", sum) // Sum: 27
Оператор break полностью осуществляет выход из цикла:
var numbers = int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} var sum = 0 for _, value := range numbers{ if value > 4{ break // если число больше 4 выходим из цикла } sum += value } fmt.Println("Sum:", sum) // Sum: 10
НазадВперед
Какие команды для кс го в параметрах запуска стоит выбрать
Для начала стоит рассмотреть, что именно игрок хочет изменить и для каких целей ему нужно оптимизировать параметры игры.
В предоставленном списке указаны основные команды, для улучшение в целом и по категориям:
Перечисление общих команд, которые могут быть полезными всем:
-novid — Команда позволяет выключать вступительный ролик при запуске. Избавляет игрока в надобности пропускать ролик при каждом запуске игры.
-console — подключает консоль в самой игре. После запуска игры, консоль уже висит перед глазами игрока и ждет его команд.
-freq «нужное число» — Команда позволяет изменить частоту обновление экрана.
+exec «наименование файла с настройками» — по запуске игры будет запускаться настроенная заранее сделанная конфигурация для игрока. По сути, возможность подгрузить шаблон настроек, отличный вариант, если за одним ПК играет несколько человек одновременно.
-high — После ввода игра будет запускаться с высоким приоритетом. Команда позволяет ПК выделять игре память в режиме реального времени, отдавая ей наивысший приоритет. Отличный вариант если игрок ищет параметры запуска кс го для слабых ПК.
-low — аналогичное действие, но уже с низким приоритетом. Работает так же, только наоборот. Может замедлить быстродействия, но если устройство выполняет другие важные операции, а попутно захотелось поиграть в CS GO не замедляя их, неплохой вариант.
-full — Команда позволяет использовать полноэкранный режим
-windowed — Игрок может использовать эту команду, если ему нужно несколько маленьких окон одновременно. Иначе говоря оконный режим.
-w — Самостоятельная возможность указать нужную ширину окна.
-h — Самостоятельная возможность указать нужную длину окна.
-language english — параметры запуска кс го на английский языке, может быть использовано, если Steam установленный на устройстве на русском, а играть он хочет на английском языке так же может быть использовано и для других языков.
+rate 124000 — максимальное количество пакетов, которые хост может принять (бит/сек.)
-d3d9ex — Параметр, который позволяет сократить использования памяти центрального процессора. Данный параметр позволяет очистить кэш файлы игры. Влияет на скорость сворачивания окон.
-noforcemspd — Команда для того, что бы настройка мыши перенеслась из Windows в игру
-noforcemaccel — отключение акселерации мыши
-threads — Позволяет указать точное число ядер процессора, которое будет использоваться.
На последнюю команду стоит обратить внимание. По сути, она указывает, какое количество ядер будет использоваться в игровом процессе
Рекомендуется установить максимальное количество имеющихся на устройстве, это поможет оптимизировать игру и поднять ФПС.
Команды для тех, кто стримит:
+cpu_frequency_monitoring — Выводит на экран частоту процессора.
+engine_no_focus_sleep_convar — Сохраняет приемлемость картинок при использовании нескольких окон сразу
cl_obs_interp_enable — команда для быстрого перехода между окнами, без задержки.
+cl_hideserverip — скрыть ip адрес сервера.
Настройка параметров графики игры:
-dxlevel 81 — Позволяет использовать DirectX 8.1
-dxlevel —Аналогично, но для DirectX 9
-soft — Запускает игру с процедурой использования графического режима Software
-d3d — Запускает игру с процедурой использования графического режима Direct3D
-gl — Тоже самое, но для Open GL
-nosync — Команда для принужденного отключения вертикальной синхронизации.
-noaafonts — Используется, что бы отключить сглаживание шрифтов экрана.
-autoconfig — Команда, для тех, кто наигрался с настройками графики и нужно все вернуть в первоначальную форму.
Параметры запуска кс го для повышения фпс и для слабых ПК в целом:
-console -novid -threads 4 -refresh 120 -noforcemparms -high -tickrate 128 +cl_cmdrate 128 +cl_updaterate 128 +rate 128000 +ex_interpratio 1
Данный набор параметров рекомендуется оптимальной настройки устройства. С ним рекомендуется не экспериментировать, если игрок точно не знает, характеристик своего ПК. С ним должен повыситься ФПС и плавность движения картинки.
Сложение и вычитание
В Go операторы сложения и вычитания работают так же, как и в математике. По сути, вы можете использовать язык программирования Go как калькулятор.
Давайте рассмотрим несколько примеров, начиная с целых чисел:
Вместо передачи целых чисел прямо в оператор мы можем инициализировать переменные для хранения целочисленных значений, используя следующий синтаксис:
Поскольку целые числа могут быть как положительными, так и отрицательными (как и 0), мы можем добавить отрицательное число к положительному:
Сложение будет работать аналогичным образом для чисел с плавающей точкой:
Поскольку мы складывали два числа с типом float, Go возвращает float с дробной частью. Однако, поскольку в этом случае десятичная часть равна 0, опускает десятичную часть. Чтобы надлежащим образом настроить формат вывода, мы будем использовать с для форматирования числа с двумя знаками после запятой, как это показано в данном примере:
Синтаксис для вычитания аналогичен сложению, кроме того, что мы изменяем оператор со знака плюс () на знак минус ():
В Go мы можем использовать операторы только для одинаковых типов данных. Мы не можем складывать и :
При попытке использовать операторы с типами данных, не являющимися одинаковыми, вы получите ошибку компиляции.
Глагол to be и Passive Voice (пассивный залог)
Пассивный (или страдательный) залог — грамматическая конструкция, в которой подлежащее выражает человека или объект, на которые направлено действие, выраженное глаголом-сказуемым. Другими словами, Passive Voice используют, чтобы показать, что кто-то или что-то не совершает действие, а испытывает его на себе.
Посмотрите на пример и почувствуйте разницу:
Active Voice |
Passive Voice |
We take a lot of photos every day Мы делаем много фотографий каждый день |
A lot of photos are taken every day Много фотографий делается каждый день |
- Чтобы соорудить Passive Voice во временах группы Simple, нужно воспользоваться формулой: to be в нужной форме ((is, am, are, was, were или will be) +V3 (глагол в третьей форме).
- Во временах группы Continuous пассивный залог образуется по схеме: to be в нужной форме ((is, am, are, was, were) + being + V3.
- В Present Perfect пассивный залог образуется по схеме have/has + been + V3.
- В Past Perfect страдательный залог сооружается так: had + been + V3.
- И, наконец, в Future Perfect он выглядит так: will/+ have + been + V3.
Чтобы вы не запутались, мы собрали все примеры Passive Voice в одной табличке:
Зачем вообще нужна такая сложная грамматическая конструкция? Не проще ли обойтись без нее? На самом деле Passive Voice очень полезен в ежедневном общении.
Пассивный залог часто используется, когда мы хотим подчеркнуть, что само действие намного важнее, чем то, кто его выполняет.
Active Voice |
Passive Voice |
A baker makes fresh muffins every day Пекарь делает свежие маффины каждый день |
At our bakery fresh muffins are made every day В нашей пекарне ежедневно делают свежие маффины |
Употребление пассивного залога оправдано и тогда, когда конкретный исполнитель действия попросту неизвестен или всем и так понятно из контекста, кто он.
Наши конфеты сделаны из органических какао-бобов |
Our candies are made from organic cacao beans |
Статуя Венеры была украдена из музея прошлой ночью. |
The statue of Venus was stolen from the museum last night |
Их встретят на вокзале |
They will be met at the train station |
Эта подвеска сделана из золота |
This pendant is made of gold |
Дом был продан в прошлом году |
The house was sold last year |
Посылку не доставили вчера, но я надеюсь, это сделают завтра |
The package wasn’t delivered yesterday but I hope it will be done tomorrow |
Протесты были подавлены |
The protests have been suppressed |
Настройки графики в CS:GO
- mat_autoexposure_max 3 — максимальная яркость экрана;
- mat_autoexposure_min 0.5 — минимальная яркость экрана;
- mat_colcorrection_forceentitiesclientside 0;
- mat_debug_postprocessing_effects 0 — не показывать алгоритмы в квадрантах экрана;
- mat_disable_bloom 1 выключить bloom эффект;
- mat_monitorgamma 2.2 — гамма (1.6 — светлый, 2.6 — темный);
- mat_queue_mode 2 — включить многоядерный рендеринг;
- mat_savechanges — cохранить настройки видео в реестре windows;
- mat_setvideomode 1680 1050 1 — установка разрешения экрана;
- muzzleflash_light 0 — отключить динамический (отраженный) свет от вспышек;
- r_cheapwaterend 0 — Прорисовка дна и воды;
- r_drawmodelstatsoverlaymax 1.5;
- r_drawmodelstatsoverlaymin 0.1;
- r_drawtracers_firstperson1;
- r_dynamic — Динамические отсветы от объектов.
Массивы из массивов в Golang
Пока что мы разобрали только массивы строк. В Go также можно создавать массивы целых чисел, чисел с плавающей запятой и даже массивы из массивов. Шахматная доска 8 х 8 представлена в следующем примере как массив из массива строк:
Листинг 8
Go
var board string // Массив из восьми массивов с восемью строками
board = «r»
board = «r» // Ставит ладью на клетку с координатами
for column := range board {
board = «p»
}
fmt.Print(board)
1 |
varboard88string// Массив из восьми массивов с восемью строками board=»r» board7=»r»// Ставит ладью на клетку с координатами forcolumn=rangeboard1{ board1column=»p» } fmt.Print(board) |
Задание для проверки:
Подумайте об игре Судоку. Как можно объявить сетку целых чисел размером 9 х 9?
Заключение
- Массив является упорядоченным набором элементов с фиксированной длиной;
- Композитные литералы помогают легко инициализировать массивы;
- Ключевое слово может итерировать через массивы;
- При получении доступа к элементам массива нужно придерживаться границ диапазона;
- Во время присваивания и передачи функций массивы копируются.
Итоговое задание для проверки:
- Допишите Листинг 8 для отображения всех шахматных фигур на их стартовых позициях, используя символы kqrbnp для черных фигур в верхней части доски, а также символы в верхнем регистре KQRBNP для белых фигур в нижней части доски;
- Напишите функцию для отображения доски;
- Вместо строк, используйте для доски. Помните, что литералы должны быть окружены одинарными кавычками и могут выводиться на экран через специальный символ .
Формы глагола to be в прошедшем
Формы этого глагола в прошедшем времени запомнить еще проще. Их всего две: was для единственного числа и were — для множественного (включая you, который, как мы помним, по-английски значит не только «ты», но и «вы» при обращении к группе людей). Говорим об одном человеке или предмете — используем was. О нескольких — were. Easy peasy lemon squeezy, как говорят англичане. То есть пара пустяков.
В этой табличке мы собрали примеры предложений с to be в прошедшем времени:
Verb to be в прошедшем времени |
|
Я был рад встретиться с вами Фильм был интересным Они были друзьями в старших классах Мы были дома Стэнли Кубрик был великим режиссером Вы были моим любимым учителем |
I was glad to meet you The movie was interesting They were friends in high school We were at home Stanley Kubrick was a great film director You were my favorite teacher |
Замыкания
Возможно создавать функции внутри функций:
является локальной переменной типа (функция принимает
два аргумента типа и возвращает ). При создании локальная функция
также получает доступ к локальным переменным (вспомните области видимости из
главы 4):
прибавляет к переменной , которая определена в рамках функции
. Значение переменной может быть изменено в функции . Вот
почему при первом вызове на экран выводится , а при втором — .
Функцию, использующую переменные, определенные вне этой функции, называют
замыканием. В нашем случае функция и переменная образуют
замыкание.
Один из способов использования замыкания — функция, возвращающая другую функцию,
которая при вызове генерирует некую последовательность чисел. Например,
следующим образом мы могли бы сгенерировать все четные числа:
возвращает функцию, которая генерирует чётные числа. Каждый
раз, когда она вызывается, к переменной добавляется , но в отличие от
обычных локальных переменных её значение сохраняется между вызовами.