Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Холивар темы: Может ли быть спагетти-код не на основе goto?

05.05.2025, 08:43. Показов 6166. Ответов 149
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
Холивар вынесенный из темы Может ли быть спагетти-код не на основе goto?


2автор: для начала нужно определиться, пишешь для себя или для некоего коллектива. Если для коллектива, то без вариантов нужно писать так как принято в профессиональных сообществах как бы вам там что-то не нравилось. А если пишете для себя, то пишите так как нравится лично вам, не издевайтесь над собой.

Например совет про разбивку метода на несколько подметодов не имеет особого смысла если это не что-то повторяемое, как раньше говорили - функция. На читаемость это абсолютно никак не влияет, скорее наоборот, потому что вы или читаете последовательно действия или прыгаете от метода к методу. Ограничение метода какими-то строками или экранами это вообще ересь. Метод должен быть ровно такой какой он и должен быть, лично вы вообще на это никак не повлияете, то что вы его расфигачите на 100500 подметодов абсолютно никак не повлияет ни на скорость ни на его читаемость.
Лично сам я люблю сокращать текст кода, писать его по возможности плотнее, но не для читаемости (читаемость как раз ухудшается). Просто я люблю плотный код и делаю я это только тогда, когда работа над методом закончена и что-то исправлять я не планирую.

Как бы всё красиво не звучало, но вы нигде не найдёте единого мнения о том как же именно лучше всего оформлять код. Я иногда вставляю код с этого форума от "великих знатоков ООП" на других ресурсах и этот код обсирают ровно так же, как мой код здесь. Так что угодить всем-всем-всем вы всё равно не сможете. Но можно конечно выбрать для себя например оформление MSDN и работать строго в этом векторе, хотя вам часто так же будут говорить про индусский код, о котором вы и пишете в этой теме.

goto - это не оператор говна, это такой же инструмент как if или for, главное тут уместность его применения. У меня изредка он бывает, в основном для выхода из вложенных циклов или когда сильно проще просто воткнуть goto на время разработки, не вижу как именно goto повлияет на читаемость, ведь вызов любой функции это точно такой же goto (если возвращаться к Бейсику, то это GOSUB), и вам тут же в этой теме совершенно нормально пишут что читаемость кода с кучей методов вдруг становится лучше, непонятно почему вызов метода это хорошо а переход по goto - это уже плохо. И в любом случае в ассемблере все ветвления так или иначе сделаны через goto, которых заметно больше, так как там скорее конструкции (IF условие GOTO). Любая итерация цикла это goto, просто не явный.

И какую бы книжку вы не читали всегда есть вероятность что её или не читали другие или они не разделяют те же принципы что там описаны.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2025, 08:43
Ответы с готовыми решениями:

Может ли быть спагетти-код не на основе goto?
Согласно Википедии: То есть подразумевается, что спагетти не обязательно только из goto. Ниже...

Спагетти код ???
Если я в представление использую foreach - то ето спагетти ??? Пример: @foreach (var i in...

С# vs vb.net Холивар или нехватка знаний?
Появилось свободное время, решил посмотреть, что за зверь такой C#... Жесть какая-то! Для...

149
05.05.2025, 09:10

Не по теме:

Цитата Сообщение от belalugoci Посмотреть сообщение
goto - это не оператор говна
Вот сколько всего про goto слышал, но чтоб такое))))))

0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
05.05.2025, 13:37
Цитата Сообщение от belalugoci Посмотреть сообщение
2автор: для начала нужно определиться, пишешь для себя или для некоего коллектива. Если для коллектива, то без вариантов нужно писать так как принято в профессиональных сообществах как бы вам там что-то не нравилось. А если пишете для себя, то пишите так как нравится лично вам, не издевайтесь над собой.
ТС периодически приходит на форум с вопросами типа - посмотрите мой код, посоветуйте что нибудь. Так что, можно сказать, он уже определился. Сейчас разбираться в его портянках желающих немного. Может, если будет писать лучше, то и полезных советов будет получать побольше.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
05.05.2025, 14:26
Цитата Сообщение от belalugoci Посмотреть сообщение
На читаемость это абсолютно никак не влияет,
Влияет, если метод имеет понятное именование и нет смысла погружаться в его логику.

Для выхода из вложенных циклов есть разные тулы: в Rust можно давать циклу label, и делать break указывая label.
В bash вроде можно указывать break-у число уровней вложенности из которых хочется выпрыгнуть.
Внутрення кухня state машин - это да, там goto оправдан.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.05.2025, 15:03
Млин, мне каждый раз так занятно читать про прыжки по методам... типа прыгать по сплошнону коду без привязки к чему либо проще.
3
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
05.05.2025, 15:39
Цитата Сообщение от Wolfdp Посмотреть сообщение
типа прыгать по сплошнону коду без привязки к чему либо проще.
Ну человек же сказал, любит плотный код. А то что любая кодовая база имеет жизненный цикл, добавятся требования - лезь изменяй, это нас не волнует. Мы делаем не SOLID-но, но плотненько.
Чукча там вроде не читатель.. Абзацы, группировка текста, параграфы - это все не для нас...
3
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 15:56  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Влияет, если метод имеет понятное именование и нет смысла погружаться в его логику.
тогда зачем вам в принципе читать код если вы не собрались погружаться в логику?

Цитата Сообщение от IamRain Посмотреть сообщение
Для выхода из вложенных циклов есть разные тулы: в Rust можно давать циклу label, и делать break указывая label.
В bash вроде можно указывать break-у число уровней вложенности из которых хочется выпрыгнуть.
во-первых мы не в разделе про раст и баш. во-вторых, это всё равно завуалированный goto. в-третьих, в C# оператор break официально завершает только один уровень цикла, но например не завершает этот же уровень в switch, то есть по сути switch завершает конкретный case (я, мягко говоря расстроен какой дебильный switch в C#), нельзя например сделать
C#
1
2
3
4
5
6
7
8
switch(a)
{
    case 0:
        b++;
    case 1:
        b++;
        break;
}
но можно
C#
1
2
3
4
5
6
7
switch(a)
{
    case 0:
    case 1:
        b++;
        break;
}
Цитата Сообщение от Wolfdp Посмотреть сообщение
Млин, мне каждый раз так занятно читать про прыжки по методам... типа прыгать по сплошнону коду без привязки к чему либо проще.
а почему в последовательном коде должны быть прыжки куда-то вообще? или вы при дебагинге лезете внутрь даже Console.WriteLine?

Цитата Сообщение от IamRain Посмотреть сообщение
Ну человек же сказал, любит плотный код
и он никак не связан с прыжками, я это написал явно, вы прочитали, но все равно решили написать свою фантазию.

Цитата Сообщение от IamRain Посмотреть сообщение
А то что любая кодовая база имеет жизненный цикл, добавятся требования - лезь изменяй, это нас не волнует
а зачем мне учитывать ВАШИ требования к коду? у меня они сугубо свои и я их не навязываю, в отличии от вас.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
05.05.2025, 16:06
Цитата Сообщение от belalugoci Посмотреть сообщение
тогда зачем вам в принципе читать код если вы не собрались погружаться в логику?
В большую кодовую базу не ныряют сразу целиком, сначала плавают "по поверхности".
Видимо, вам не приходилось с такими сталкиваться.
0
Эксперт .NET
 Аватар для Usaga
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,962
05.05.2025, 16:10
Цитата Сообщение от belalugoci Посмотреть сообщение
тогда зачем вам в принципе читать код если вы не собрались погружаться в логику?
Логики может быть сильно больше, чем можно прочитать в течении жизни (без шуток). А задача может требовать только изучения чего-то конкретного.

Не все приложения бывают на три строчки, чтобы всю их логику сидеть читать за чашечкой чая.
0
 Аватар для Andrey-MSK
3313 / 2200 / 387
Регистрация: 14.08.2018
Сообщений: 7,404
Записей в блоге: 4
05.05.2025, 16:25
Цитата Сообщение от belalugoci Посмотреть сообщение
а почему в последовательном коде должны быть прыжки куда-то вообще?
Если код написан не процедурно, а с помощью ООП, тогда он ни разу не последовательный... Методы могут находится где угодно в кодовой базе.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 16:30  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
В большую кодовую базу
ну вот, вы опять о чем-то своём, девичьем.

Цитата Сообщение от IamRain Посмотреть сообщение
Видимо, вам не приходилось с такими сталкиваться.
не важно что мне там приходилось или не приходилось.

Цитата Сообщение от Usaga Посмотреть сообщение
Логики может быть сильно больше, чем можно прочитать в течении жизни (без шуток). А задача может требовать только изучения чего-то конкретного.
изучайте конкретное, что мешает-то? или вы думаете если конвертацию в json вы засунете в отдельный метод это что-то изменит? да вы и так это увидите в коде, вы же чужой код умеете читать? или я что-то не понял? лет 7 мне вы все хором талдычите что вы умете читать чужой код, а я напротив всегда и всем говорил, что читать чужой код это очень сложно и я делаю это плохо. А теперь вот вскрываются факты, оказывается читать вы ничего не умеете пока вам не распишут всё понятными английскими названиями методов. Забавненько. Просто я ориентируюсь исключительно на код и логику кода, я читаю код, формирую у себя в голове логику, процесс трудоёмкий и сложный, а вы прыг-прыг по методам, нахватались верхушек и типа всё поняли? А если что-то не работает как искать собрались? Будете ждать появления метода с именем WierdErrorMethod()?

Цитата Сообщение от Usaga Посмотреть сообщение
Не все приложения бывают на три строчки, чтобы всю их логику сидеть читать за чашечкой чая.
для меня чтение любого чужого кода это мега-стресс, мега-задача, это очень сложно, особенно когда программист реализовал очень хитрую какую-то свою задумку, там и с PDF на 50 страниц не всегда можно понять что и зачем сделано. Чем вам помогут названия методов? Ну нашли вы метод AliasConverter и дальше что? Зачем он нужен? Или вы ждёте исключительно документированный код? Я вот как-то по жизни всё больше читаю код 80-90-х, то на Си то на Паскале, то на Ассемблере, частенько даже документированный, вот только названия функций и процедур абсолютно никак не влияют на понимание логики работы.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
05.05.2025, 16:31
Цитата Сообщение от Wolfdp Посмотреть сообщение
Млин, мне каждый раз так занятно читать про прыжки по методам... типа прыгать по сплошнону коду без привязки к чему либо проще.
Всё верно. Объём кратковременной памяти у человека в среднем равен 7 объектам. Т.е. когда в коде больше логических сущностей - переменных, блоков, и т.д. - воспринимать такой сложно. Потому собственно и нужно абстрагировать код - выделять логические блоки во внешние сущности - классы, методы, т.д.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 16:32  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Если код написан не процедурно, а с помощью ООП, тогда он ни разу не последовательный... Методы могут находится где угодно в кодовой базе.
мы же про метод говорим, а не про всю программу.
0
2281 / 1597 / 400
Регистрация: 26.06.2017
Сообщений: 4,723
Записей в блоге: 1
05.05.2025, 16:32
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 16:35  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Потому собственно и нужно абстрагировать код - выделять логические блоки во внешние сущности - классы, методы, т.д.
и вам повезёт если тот кто будет писать код будет всё придумывать так же как вы, иначе вы получите свою логику, которая будет в виде таких же сущностей, но со своей логикой. Почему вы решили что все люди на планете мыслят одинаково? Я вот как-то погрузился в не C#-ный код и стал переписываться с другими программистами и так выходит что последователей неООП то же немало, даже в том же Си++.
0
 Аватар для Andrey-MSK
3313 / 2200 / 387
Регистрация: 14.08.2018
Сообщений: 7,404
Записей в блоге: 4
05.05.2025, 16:36
Цитата Сообщение от Wolfdp Посмотреть сообщение
Млин, мне каждый раз так занятно читать про прыжки по методам... типа прыгать по сплошнону коду без привязки к чему либо проще.
Ваш ответ на это
Цитата Сообщение от belalugoci Посмотреть сообщение
а почему в последовательном коде должны быть прыжки куда-то вообще? или вы при дебагинге лезете внутрь даже Console.WriteLine?
Мой ответ на ваш
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Если код написан не процедурно, а с помощью ООП, тогда он ни разу не последовательный... Методы могут находится где угодно в кодовой базе.
И при чём тут это?
Цитата Сообщение от belalugoci Посмотреть сообщение
мы же про метод говорим, а не про всю программу.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 17:06  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
И при чём тут это?
при том что вы читаете куски текста по диагонали и назначаете им произвольный смысл, отсюда ваше непонимание написанного. У всего есть контекст. Wolfdp пишет про прыжки, а прыжки откуда взялись? А вот с этих моих слов:
Цитата Сообщение от belalugoci Посмотреть сообщение
Например совет про разбивку метода на несколько подметодов
То есть вместо:
a=1;
b=1;
c=1;
Хотят делать
SetA(1);
SetB(1);
SetC(1);
И вот то что выше - это ОДИН метод, разбитый на части, а не вся программа.
0
 Аватар для Andrey-MSK
3313 / 2200 / 387
Регистрация: 14.08.2018
Сообщений: 7,404
Записей в блоге: 4
05.05.2025, 17:28
Цитата Сообщение от belalugoci Посмотреть сообщение
Wolfdp пишет про прыжки, а прыжки откуда взялись? А вот с этих моих слов:
Он пишет про прыжки с goto, которые как раз ни к чему не привязаны, просто метки, с чего и начался весь топик. Вот по ним реально замаешься прыгать и понимать логику этих прыжков. А на метод поставил курсор, нажал F12 и ты в теле метода, любая IDE позволяет это сделать. Он не цитировал ваши измышления.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
05.05.2025, 17:38  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Он пишет про прыжки с goto
с чего вы это взяли? у нас не первая с ним переписка про прыжки по методам. и он именно про меня пишет, а не про goto

Цитата Сообщение от belalugoci Посмотреть сообщение
Например совет про разбивку метода на несколько подметодов не имеет особого смысла если это не что-то повторяемое, как раньше говорили - функция. На читаемость это абсолютно никак не влияет, скорее наоборот, потому что вы или читаете последовательно действия или прыгаете от метода к методу
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.05.2025, 17:57
В своей практике на первой работе имел опыт разгребания одного единственного метода на много строк. Он был "сложным", к нему имелась неочевидная документация и я потратил кажись неделю на то чтобы понять что он делает и как мне поправить логику на необходимую по ТЗ. Да, я был тем ещё нубом, но тот факт что метод был сплошным полотном очень сильно бил по восприятию. И такое дело -- желающих помочь почему-то не находилось.

------------------------------------------------------

Окей, возьмём что-то практическое и относительно распространённое: инициализация и старт хоста. Данное действие подразумевает три этапа:
- вычитка и задание конфигов
- указание зависимостей
- непосредственно build & run

Всё это можно запихнуть в метод Main, при этом первые два этапа можно делать в разнобой и в любом порядке. Дальше есть все шансы получить такой результат:
- чела, что руководил кодовой базой, похищают инопланетяне (уходит в другую контору, переводиться на другой проект и ещё 100500 причин, по которым он становиться недоступен)
- новый сотрудник начинает копать код. Видит простыню, где сначала задается конфиг БД, потом пачка привязок случайных классов/сервисов, потом задание конфигурации временных файлов, опять привязки, опять рандомные конфиги для сервиса рассылки отчетности, опять привязки....
- разбирает модуль рассылки отчетности. Конфиги в целом найти будет не сложно (если их хотя бы позаботились объединить в одну модель). Но вот глянуть зависимости... Вместо того чтобы в отдельном окне открыть один(!) метод, в котором будет выполняться, он будет прыгать по коду, чтобы понять какие вещи за какую реализацию отвечают и в каком порядке. Потому как может быть один интерфейс плана IMessageFactory и 100500 его реализаций.
- бонусом меняя логику для модуля, мы меняем код одного общего метода, что выливается в АДСКИЙ МЕРЖ. (Кстати -- это хороший аргумент и для обычной разработки. Меняя логику в одном месте, если она упакована в метод/класс, то сразу вылезет внешняя зависимость, что предотвращает непонимание "а чего поменял в одном месте, а упало в другом").

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

А теперь вопрос, насколько сложнее записать так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void Main(string[] args)
{
    var host = HostInitiator.Create(args);
    host.Run();
}
 
static class HostInitiator
{
   public static IHost Create(string[] args)
   {
        var builder = new HostBuilder();
        builder.Configuration(args);
        builder.Init(args);
        var host = builder.Build();
        return host;
   }
 
   public static void Configuration(this IHostbuilder builder, string[] args)
   {
        builder.ConfigurationDB();
        builder.ConfigurationNotification(args);
   }
 
   public static void Init(this IHostbuilder builder, string[] args)
   {
       builder.InitModule1(args);
       builder.InitModule2();
       builder.InitModule3();
   }
}
------------------------------------------------------

Ладно, пример с хостом сложный для понимания, если этот хост никогда не писал. Допустим мы пишем кастомный List<T>, которому мы хотим указать что нужно выполнять бинарный поиск по указанному свойству объекта. И у нас примитивная реализация через отсортированный массив. Конструктор такого класса может выглядеть так:

C#
1
2
3
4
5
public CustomList(IEnumerable<T> items)
{
    _arr = items.ToArray();
    // и прям тут сортировка скажем пузырьком
}
А можно написать так

C#
1
2
3
4
5
6
7
8
9
10
public CustomList(IEnumerable<T> items)
{
    _arr = items.ToArray();
    Sort(arr);
}
 
internal static void Sort(T[] item)
{
    // сортировка
}
Шило на мыло? Не совсем. Теперь мы можем покрыть Sort тестом, т.к. internal внезапно можно сделать публичным для сторонней библиотеки (а тесты по сути и являются обычной сторонней либой).

Добавлено через 6 минут
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Он пишет про прыжки с goto, которые как раз ни к чему не привязаны, просто метки, с чего и начался весь топик.
Не совсем. Я писал прям про чистый код скажем на 1к строк, в котом сначала один цикл, потом второй, пучёк методов и снова цикл. И вот копаешься скажем в последнем цикле и не понимаешь -- это локальная переменная для цикла, или для всего метода? Листаешь вверх, видишь её объявление в самом начале. Листаешь вниз, смотришь где она ещё используется. И так на каждый чих. Частично это можно "пофиксить" скобками, как предлагал Элд Хасп, но всё равно уныло.

Когда есть отдельный метод, то ориентируешься по входным параметрам и всем переменным в нём, что очень сильно разгружает необходимость держать в голове весь остальной код выше.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2025, 17:57
Помогаю со студенческими работами здесь

Какие альтернативы goto можете предложить?
ситуация следующая. есть главное меню: 1. Список Блюд 2. Список напитков 3. Выход При...

Чем можно заменить конструкцию On Error GoTo
Здравствуйте! Чем можно заменить данную конструкцию? Интересует больше как Метки(Этикетки)...

c# и goto
поразительно но опять какаято странная ошибка. компилятор ругается, если я ставлю метку(для...

goto есть ли такое и как им пользоваться
Добрый день, если такая возможность перескакиветь в ходе выполнения программы из одной строки в...

Чрезмерное употребление оператора goto
Сделал небольшую программку, подсчитываем доходы и расходы Часто где использовал оператор goto,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru