Глобальные переменные: зло или добро? (Продолжение)
Непосредственно про глобальные переменные несколько ниже, а сейчас прелюдия. Итак, в результате экспериментирования удалось преодолеть недостаток PHP, где он не может в переключателе switch делать include кода, в котором имеются операторы break, выдавая сообщение об ошибке. Возможно что это и не недостаток, а способ реализации современных интерпретаторов, при котором даже инклюдить код в цикле на тоже самое место не получается. Пытаясь ранее преодолеть этот недостаток я пришёл к выводу, что нужно оборачивать код в функцию и подключать эту функцию в switch. А в этой функции вместо break делать return в нужных точках кода. Напомню, что реализуется автомат. К тому же с глобальными переменными. Об этом ниже. Но, применение функций вместо просто кода имеет свои ограничения чисто архитектурного плана, да и в виде функционала! И это крупный недостаток такого костыля, ибо по другому это не назовёшь! Однако! Выход всё же нашёлся, и как всё гениальное он оказался очень простым! Как только я сразу об этом не догадался просто диву даёшься.. Итак имеем автомат:
В инклюде имеем:
Итак, развлекуха продолжается! А если серьёзно, то продолжается НОРМАЛЬНЫЙ кодинг проекта. Если бы я программировал в традиционном стиле, то мне пришлось бы потратить на это дело в 10 раз больше времени, так как кодить в таком стиле это сущее облегчение. Здесь всё под рукой, все переменные, разделение ответственности происходит на уровне соглашений имён. Можно реализовать даже АРХИ-сложный алгоритм без излишнего напряжения мозгов. Функционал движка будет значительно расширен, он будет просто намного умнее своих предшественников. Также будет реализована возможность по самолечению кода, что отсутствует в других реализациях. Автомат позволяет сделать всё, что хочешь. Возвращаясь к теме глобальных переменных. Так зло они или добро? Давайте, наконец попытаемся на него ответить. Большинство специалистов считают, что зло. Даже я так считал, правда с натяжкой. для некоторые переменных всё-таки лучше иметь ограниченную область видимости. Сейчас я всё более склоняюсь к более открытой реализации системы. Понимаете, переменные это ДАННЫЕ в чистом виде. Они то, с чем РАБОТАЮТ, а не то что работает. Это первое. Должны ли данные принадлежать глобальной видимости? Если мы стремимся к компонентной системе, то каждый компонент в той или иной степени должен в перспективе иметь полный доступ к любой области данных. Практика показывает, что очень часто компоненту требуется доступ к самым разным данным, которые, в общем случае, принадлежат разным сферам ответственности. При традиционном кодинге приходится делать рефакториниг проекта, чтобы изменить архитектуру или функционал. Если бы данные обще-разделялись, то такой проблемы бы не было. Не надо было бы постоянно ломать голову над тем, каким образом передать параметр из одной области в другую. А ведь, иногда эти области очень далеки друг от друга и хорошо замаскированы.. Конечно, скажут, но ведь это говнокодинг, так все считают. Ну и пусть считают. и работают в командах. Я в команде не работаю, а работаю один, а когда работаешь один то приходится учитывать такую вещь как фактор времени. Мне некогда заниматься головоломками, пусть этим занимаются те, кто получает стабильную зарплату, которая зависит от того, сколько времени вы потратили на проект в сторону увеличения.. Индусы знают.. А я один должен быть эффективнее целой команды! И мне надо кодить, и кодить БЫСТРО, а самое главное ЭФФЕКТИВНО. Ведь тот же пых это интерпретатор, хотя сейчас его и разогнали благодаря байт-коду и виртуальной машине. Области ответственности глобальных данных прописываются в ДОКУМЕНТЕ! Что большинство не умеет и не любит делать.. Учили-то не тому.. Возвращение к родимому бейсику? Да, да, да! И это круто! |
Всего комментариев 17
Комментарии
-
Цитата:Возвращение к родимому бейсику?
Запись от locm размещена 16.11.2018 в 15:10 -
Запись от Avazart размещена 16.11.2018 в 16:01
Обновил(-а) Avazart 16.11.2018 в 16:04 -
При том, что первые бейсики были неструктурными.Там был оператор goto, которым и оперировали, и, кстати, реализовывали правильные алгоритмы, ибо не знали о таком понятии, как "структурное программирование". То есть реализовывали то, что требовалось задачей, не больше и не меньше того.. Там были ТОЛЬКО глобальные переменные и вообще не было функций и процедур. Это потом уже ввели процедуры gosub. Первоначально всё реализовывалось на одном листинге. Это конечно плохо с ростом программы, однако здравое зерно там было..
Самое главное, что всё это позволяет получить Свободу.
Вы забыли о свободе самовыражения, ведь нужно придерживаться каких-то принципов, соглашений и пр. Коллеги не поймут. Потребителю от этого ни горячо ни холодно: им нужно чтобы программа хорошо работала, и всё.
Сейчас новички начинают не с бейсиков, а с питонов и хаскелей, и их мозги уже неисправимы..Запись от CoderHuligan размещена 16.11.2018 в 17:13 -
Бейсик был одним из первых ЯВУ. Неудивительно что он в те времена был неидеален.
Который до сих пор есть в C/C++ и его используют.
Вероятно дело в другом. Ресурсы первых компов были очень скромными и на первые ЯВУ сильно влиял ассемблер.
Gosub это вызов подпрограммы и к процедурам/функциям отношения не имеет. Это аналог ассемблерного Call с возвратом по Return (не путать с одноименным сишным оператором).
Но даже на современном диалекте бейсика я могу написать что-то типа.И это будет работать.PureBasic 1 2 3 4 5 6 7 8
y=2 Gosub Calc Debug x End Calc: x = y * 2 Return
Кликните здесь для просмотра всего текстаЗапись от locm размещена 16.11.2018 в 22:59
Обновил(-а) locm 16.11.2018 в 23:01 -
Ещё надо посмотреть, что считать "идеальностью".. Конечно он был не идеален, но не из-за того, что не имел структурных операторов, а из-за того, что вообще не имел никакого понятия о какой-либо парадигме.
В курсе. Сам его там использую. В си есть даже указатели на метки(в gcc).
Системный язык не может без этого.
Да, это так.
Цитата:
По нормальному нужен особый язык!..
А сейчас, то то не так, то другое. Приходится подстраиваться.. Вот, я вчера написал про то, что кодинг продолжается. Он действительно продолжается, однако, придётся всё-таки использовать функции вместо просто инклюдов. Причина? Причина в том, что мне нужен расширяемый проект, что-то типа data-driven programming(кому интересно, в гугл), где логика в основном определяется конфигами. Я могу прописать в конфиге вызов какой-то процедуры в каком-то файле, а код это выполнит. И если мне нужно удалённо пользователю прислать плагин, то этот плагин автоматически пропишется в системе не меняя существующего кода. Юзеру нужно будет лишь нажать одну кнопку с инсталяцией. А если плагин нужно деинсталировать, то он сам деинсталируется выписав себя из всех конфигов. Если инклюдить прямо в switch, то придётся всё прописывать прямо в коде, а это не айс, по крайней мере в данном проекте(я пишу форумный движок). Придётся использовать чисто компонентную модель. А автоматы создавать прямо в функциях. Это конечно сильно ослабит проект, но хотя бы он будет понятен другим программистам если те захотят присоединится к его развитию, а я на это надеюсь.
Мне самому интересно что из этого выйдет. Но что-то должно выйти, ведь ядро практически готово, а там уже легче: только наращивай функционал.Запись от CoderHuligan размещена 17.11.2018 в 10:23
Обновил(-а) CoderHuligan 17.11.2018 в 13:29 -
Запись от Usaga размещена 18.11.2018 в 07:42 -
Запись от Rius размещена 18.11.2018 в 09:28 -
Запись от Usaga размещена 18.11.2018 в 09:54 -
Запись от CoderHuligan размещена 18.11.2018 в 10:22 -
Запись от Rius размещена 18.11.2018 в 10:35 -
Запись от CoderHuligan размещена 18.11.2018 в 11:22 -
Запись от Rius размещена 18.11.2018 в 11:27 -
Запись от CoderHuligan размещена 18.11.2018 в 11:35 -
Запись от CoderHuligan размещена 18.11.2018 в 11:37 -
Запись от Rius размещена 18.11.2018 в 11:47 -
Цитата:Мне ближе поиск истины, где бы она не находилась.
Цитата:И ваша наука об очень многом любит умалчиватьЗапись от Usaga размещена 19.11.2018 в 08:58 -
Запись от Usaga размещена 19.11.2018 в 09:00