Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2015, 00:19   #11
Buron Hoise
Заблокирован
 
Регистрация: 03.08.2015
Сообщений: 28
По умолчанию

Что в последней студии?

Что значит < typeargs > вот здесь? https://msdn.microsoft.com/en-us/lib...verview_topic6

Generic Method https://msdn.microsoft.com/en-us/lib...v=vs.100).aspx

Если я разобью один большой метод на кучу мелких, он станет проще? С одной стороны я спрячу лишние детали, но от этих "пряток" ничего не упрощается, даже наоборот. Была одна линейная программа, а стала лапша, в которой хрен найдёшь даже главный метод. Это привязывает к IDE.

Меня немного коробит от методов, которые вызываются ровно один раз ровно в одном месте программы. И от отсутствия как-то проследить за выполнением кроме как выполняя программу в дебаггере.

Есть ли возможность как-то раскрывать методы на месте? Чтобы они показывались как папки в эксплорере, сворачивались разворачивались по клику. И чтобы тому, кто на мой код набредёт, было легко найти главный метод. Или построить call graph.

Последний раз редактировалось Stilet; 10.09.2015 в 12:00.
Buron Hoise вне форума Ответить с цитированием
Старый 06.08.2015, 08:34   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в студии начиная можно скрывать тела методов(с 2010 точно), слева плюсик/минус должен быть(правда про Express версии не знаю).

далее дробить излишне не нужно, это усложняет.

ну а насчет отладчика, это логично что внутренности проги наблюдать лишь в нем, вне отладчика прога должна работать хорошо, и необходимости в этом нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.08.2015, 08:40   #13
Buron Hoise
Заблокирован
 
Регистрация: 03.08.2015
Сообщений: 28
По умолчанию

Он скорее скрывает чем раскрывает. Мне бы как-то сделать, чтобы раскрывалось прямо внутри метода. Чтобы по требованию под интересным методом показывалось содержимое другого метода, внутри того метода ещё раскрытые методы, и т.д. Как папки в проводнике.
Buron Hoise вне форума Ответить с цитированием
Старый 06.08.2015, 10:32   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

то есть вы пишете все в методах но чтоб методов не было?

и да, в проводнике вы видите лишь одну папку(содержимое).
а дерево это ваш callstack.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.08.2015, 10:57   #15
Buron Hoise
Заблокирован
 
Регистрация: 03.08.2015
Сообщений: 28
По умолчанию

...

как в проводнике

Buron Hoise вне форума Ответить с цитированием
Старый 07.08.2015, 11:36   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну и где в проводнике вы видите содержимое нескольких папок сразу?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.08.2015, 13:30   #17
Buron Hoise
Заблокирован
 
Регистрация: 03.08.2015
Сообщений: 28
По умолчанию

Давай я тебе буквами нарисую что мне нужно.

Код:
SomeClass.Main()
	> SomeClass.WashDishes()
	> SomeClass.Sleep()
	> SomeClass.Kick()
После щелчка по > слева от SomeClass.Sleep()

Код:
SomeClass.Main()
	> SomeClass.WashDishes()
	V SomeClass.Sleep()
		> SomeClass.GoToBed()
		> SomeClass.LayDown(Hours.Hours(8))
		> SomeClass.GetUp()
	> SomeClass.Yawn()
Вот пример получше:

Код:
MainClass.Main():
	> Dinner TodayDinner = MainClass.WhatIsForDinnerToday()
	> MainClass.Eat(TodayDinner)
Раскрываем методы:

Код:
MainClass.Main():
	V Dinner TodayDinner = MainClass.WhatIsForDinnerToday()
		Dinner MainClass.WhatIsForDinnerToday():
			return PossibleDinner.Chicken
	V MainClass.Eat(TodayDinner)
		MainClass.Eat(Dinner TodayDinner):
			> Calories currentCalories = MainClass.GetCalories()
			> Calories newCalories = TodayDinner.GetCalories()
			> currentCalories = currentCalories.Add(newCalories)
			> MainClass.SetCalories(currentCalories)
			> TodayDinner.MarkEaten()
И ещё раскрываем методы:

Код:
MainClass.Main():
	V Dinner TodayDinner = MainClass.WhatIsForDinnerToday()
		Dinner MainClass.WhatIsForDinnerToday():
			return PossibleDinner.Chicken
	V MainClass.Eat(TodayDinner)
		MainClass.Eat(Dinner TodayDinner):
			> Calories currentCalories = MainClass.GetCalories()
			> Calories newCalories = TodayDinner.GetCalories()
			> currentCalories = currentCalories.Add(newCalories)
			V MainClass.SetCalories(currentCalories)
				MainClass.SetCalories(Calories currentCalories):
					_calories = currentCalories
			> TodayDinner.MarkEaten()
И так пока не будет видно что происходит.

Последний раз редактировалось Stilet; 10.09.2015 в 12:00.
Buron Hoise вне форума Ответить с цитированием
Старый 07.08.2015, 18:50   #18
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

А как быть с рекурсией?!

если нужно смотреть код вызываемых функций
чтобы понять ЧТО они делают ЗНАЧИТ у них плохое ИМЯ (лечится переименованием)
если чтобы понять КАК они делают то НАДО просто смотреть КОД нужной функции.

как правило функции пишутся для того чтобы СКРЫТЬ действия, а не показать.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.08.2015, 19:05   #19
Buron Hoise
Заблокирован
 
Регистрация: 03.08.2015
Сообщений: 28
По умолчанию

Ну что поделать, я не могу понять, что делает метод, лишь глядя на имя. И к сожалению это уже не в моей власти, не могу понять и всё. Но я попробую писать именно документированные методы в будущем, хотя и недолюбливаю естественные языки. Комментарии лгут, код не лжёт.

А, что с рекурсией делать? Можно либо не делать рекурсию, либо не делать полное раскрытие сразу всего. В файловой системе рекурсия запрещена, как бы. А может и разрешена, ссылки есть. Везде полумеры, лишь бы работало.

Да, и код останется в том же виде, в каком и был, только будет отображаться немного по-другому. Он по-прежнему однослойный блин из методов, но при открытии будет открываться только главный (или только публичные), а все остальные будут показываться по необходимости. Я НИКОГДА не могу найти main, знаете как раздражает!

Последний раз редактировалось Buron Hoise; 07.08.2015 в 19:30.
Buron Hoise вне форума Ответить с цитированием
Старый 10.09.2015, 11:07   #20
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Buron Hoise, вы на каком сейчас этапе? Если есть демка, то кидайте - потестим.

Вот может быть вам пригодится реализация алгоритма Flood Fill

Код:
    public static void FFuncover(int x, int y, bool[,] visited)
    {
        // Coordinates in Range?
        if (x >= 0 && y >= 0 && x < w && y < h)
        {
            // Visited already?
            if (visited[x, y])
            {
                return;
            }

            // Uncover element
            elements[x, y].LoadTexture(AdjacentMines(x, y));

            // Close to a mine?
            if (AdjacentMines(x, y) > 0)
            {
                return;
            }

            // Set visited flag
            visited[x, y] = true;

            // Recursion
            FFuncover(x, y + 1, visited);
            FFuncover(x + 1, y, visited);
            FFuncover(x, y - 1, visited);
            FFuncover(x - 1, y, visited);
        }
    }
Поиграйте, пожалуйста, если найдёте ошибку - сообщите:

Язык: C#
Движок: Unity2D
Базовый туториал
Изображения
Тип файла: png MineSweeper.png (7.1 Кб, 51 просмотров)
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используя ООП создать в динамической памяти фигуру, представляющую связный список отдельных объектов (C#) BaHDaJl Помощь студентам 0 20.06.2012 15:42
Добавить в XML дополнительное поле используя appendChild. Alfiks Microsoft Office Excel 1 14.03.2011 12:59
Как можно используя IdHttp обратиться к серверу по IP не используя доменное имя. Chasow Работа с сетью в Delphi 1 06.04.2010 04:16