реклама на сайте
подробности

 
 
> static variable
Jenya7
сообщение Apr 3 2016, 09:40
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Зачем локальную переменную делать статик? Если мы сохраняем ее в RAM то с тем же успехом ее можно сделать глобальной ну или статик на уровне файла.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Apr 3 2016, 14:38
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



При "правильном" программировании все статические переменные, которые применяются только внутри функции, нужно обязательно объявлять внутри этой функции.
Например, переменная step, которая является текущим шагом конечного автомата, описываемого функцией.
Это повышает читабельность кода и снижает возможность ошибок.
Нельзя случайно изменить эту переменную в другой функции и не нужно рыться по всему проекту, выясняя где эта переменная еще используется.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 4 2016, 06:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Baser @ Apr 3 2016, 17:38) *
При "правильном" программировании

Но такой подход убивает чистоту функции, а в некоторых языках программирования чистота функции большой плюс.
Функцию с внутренней переменной step не особенно запихнешь в библиотеку для повторного использования.
С многопоточностью будут проблемы у такой функции.
Совпадение имен глобальной и локальной переменной тоже лучше не практиковать - попутать что где легче простого.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 5 2016, 04:55
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (adnega @ Apr 4 2016, 12:22) *
Но такой подход убивает чистоту функции, а в некоторых языках программирования чистота функции большой плюс.
Функцию с внутренней переменной step не особенно запихнешь в библиотеку для повторного использования.
С многопоточностью будут проблемы у такой функции.

Ну, с глобальной переменной будет ровно то же самое. Что касается полезности, то завит от. У локальных статических функций есть свои плюсы. Например, функции-генераторы. Или тот же синглтон Мейерса. Реализация получается простая и эффективная. Конечно, в любом случае программист должен чётко представлять, что он делает и какие последствия могут возникнуть из-за неправильного использования.

QUOTE (adnega @ Apr 4 2016, 12:22) *
Совпадение имен глобальной и локальной переменной тоже лучше не практиковать - попутать что где легче простого.

Это да. К слову, глобальных переменных нужно стараться избегать, во всяком случае, минимизировать их количество.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 5 2016, 08:04
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(dxp @ Apr 5 2016, 07:55) *
Ну, с глобальной переменной будет ровно то же самое.

А если все необходимые переменные передавать в функцию (в виде списка или сложного объекта)?
Разумеется, что совсем без побочных действий не обойтись, но если данные можно отделить от кода,
то я такой возможностью пользуюсь.
Тут пример для управления шаговым двигателем приводили. Предложенная реализация возможна
для одного двигателя, а если их много больше?
Я бы сделал массив объектов, которые бы хранили все необходимое - и текущий шаг, и скорость, и ускорение,
и целевое значение, обратную связь по энкодеру или потенциометру, адреса пинов, если это необходимо.
А функцию, решающую что делать с полем step, сделал бы универсальной.
Разумеется static переменных в ней не было бы. Оформил бы это в виде библиотеки и таскал из проекта в проект,
где есть хоть один шаговый двигатель.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   static variable   Apr 3 2016, 09:40
- - Baser   Цитата(Jenya7 @ Apr 3 2016, 12:40) с тем ...   Apr 3 2016, 10:31
|- - Jenya7   Цитата(Baser @ Apr 3 2016, 16:31) Для огр...   Apr 3 2016, 10:59
|- - Сергей Борщ   Цитата(adnega @ Apr 5 2016, 10:04) Разуме...   Apr 5 2016, 08:52
|- - adnega   Цитата(Сергей Борщ @ Apr 5 2016, 11:52) с...   Apr 5 2016, 09:02
- - Jenya7   спасибо. наконец то понял для чего это нужно.   Apr 4 2016, 05:50
- - Baser   Цитата(adnega @ Apr 4 2016, 09:22) Но так...   Apr 5 2016, 10:13
|- - Сергей Борщ   Цитата(Baser @ Apr 5 2016, 12:13) Для таб...   Apr 5 2016, 10:48
|- - Baser   Цитата(Сергей Борщ @ Apr 5 2016, 13:48) С...   Apr 5 2016, 12:08
||- - esaulenka   Цитата(Baser @ Apr 5 2016, 15:08) где гов...   Apr 7 2016, 07:03
|- - zltigo   QUOTE (Сергей Борщ @ Apr 5 2016, 13:48) ....   Apr 7 2016, 07:35
- - Baser   Цитата(esaulenka @ Apr 7 2016, 10:03) При...   Apr 7 2016, 08:50
- - Сергей Борщ   Я и мигалку светодиодов на плюсах пишу. В общем, с...   Apr 7 2016, 10:49
|- - dxp   QUOTE (Сергей Борщ @ Apr 7 2016, 16:49) Я...   Apr 8 2016, 05:31
- - Сергей Борщ   может быть дядька Шилдт имел ввиду объектно-ориент...   Apr 8 2016, 08:45
|- - Baser   Цитата(Сергей Борщ @ Apr 8 2016, 11:45) м...   Apr 8 2016, 12:03
- - ViKo   По-моему, в С так же можно использовать структуры,...   Apr 8 2016, 09:00
|- - Сергей Борщ   QUOTE (ViKo @ Apr 8 2016, 11:00) По-моему...   Apr 8 2016, 10:28
|- - ViKo   Цитата(Сергей Борщ @ Apr 8 2016, 13:28) В...   Apr 11 2016, 05:56
- - ViKo   А как называется свойство, когда функции с одинако...   Apr 8 2016, 11:33
|- - zltigo   QUOTE (ViKo @ Apr 8 2016, 14:33) А как на...   Apr 8 2016, 11:47
|- - Сергей Борщ   QUOTE (zltigo @ Apr 8 2016, 13:47) Писани...   Apr 8 2016, 12:52
|- - zltigo   QUOTE (Сергей Борщ @ Apr 8 2016, 15:52) И...   Apr 8 2016, 13:26
|- - Сергей Борщ   QUOTE (zltigo @ Apr 8 2016, 15:26) Не пон...   Apr 8 2016, 13:45
|- - zltigo   QUOTE "Ты видишь суслика? А он есть!...   Apr 8 2016, 14:11
- - Herz   Господа! Напоминаю, тема была открыта совсем н...   Apr 11 2016, 07:30


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 03:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.02293 секунд с 7
ELECTRONIX ©2004-2016