Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480

Как лучше ветвить метод

20.10.2021, 00:56. Показов 1840. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли какая-нибудь выгода:
C#
1
2
3
4
string s;
if(a)s="a";
else s="b";
AnyMethod(s);
перед:
C#
1
2
if(a)AnyMethod("a");
else AnyMethod("b");
Или без разница и писать можно как угодно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.10.2021, 00:56
Ответы с готовыми решениями:

Как лучше запустить метод в отдельном потоке?
Добрый день! Прошу вашего опытного совета. У меня есть статический метод, созданный в консольном приложении. При запуске вываливалась...

Как лучше организовывать метод Update в Rest API?
Такая ситуация: в контроллер прилетает вьюмодель, дальше мы мапим в нашу обычную модель. Во вьюмодели есть не все поля, которые есть в...

Как лучше передать массив объектов в метод?
Есть класс Product и массив объектов P размера SIZE. Нужно отфильтровать объекты по названию продукта. Для этого передаю массив P в метод...

19
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 01:00
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Есть ли какая-нибудь выгода
Практической выгоды никакой.
Можете писать вообще так:
C#
1
AnyMethod(a ? "a" : "b");
1
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 01:30  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Практической выгоды никакой.
Хотел узнать о такой ситуации: есть участок кода, который производит несколько вычислений. Вычисления это две или три строки кода. Либо для каждой из двух ветвей писать этот код со своими параметрами (т.е. для второй ветви просто копирование и подставка нужных параметров), либо ветвить инициализацию параметров и передавать их в участок кода, в котором происходят вычисления. С точки зрения быстроты кодирования первый вариант предпочтительнее. Но может есть в нем недостатки? Первый способ похож на инлайн методов. Но почему-то не все методы компилятор инлайнит. Значит есть какие-то недостатки?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 01:35
Fylhtq05, я бы в этом случае сначала вычислял аргументы, а потом после условия передавал их в метод — как у вас в первом варианте. Код обычно более читаемый с таким подходом.

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Но может есть в нем недостатки?
Зависит от того, сколько переменных вычисляется и что за вычисления.
Если там чего-то много происходит, то можно вообще вынести в отдельный метод, чтобы не валить все в одну кучу.
1
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 01:52  [ТС]
А если все-таки не выносить код в метод и не инициализировать параметры, а просто делать копирование с подставкой параметров, т.е. аналог инлайна. Есть у инлайна, кроме увеличения экзешника, другие недостатки? Кажется, где-то читал, что в будущем можно будет инлайнить методы по своему усмотрению. Если недостатков нет, кроме размера исполняемого файла, имеет смысл инлайнить почти все методы, т.к. диски сейчас большие, а при инлайне не происходит задержка, связанная с вызовом метода и передачи в него параметров?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 02:04
Лучший ответ Сообщение было отмечено Fylhtq05 как решение

Решение

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Есть у инлайна, кроме увеличения экзешника, другие недостатки?
Да, чем больше размер метода и количество в нем базовых блоков, тем меньше джиттер будет его анализировать для оптимизаций, тем в целом медленнее он будет работать.
1
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 13:12  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
чем больше размер метода и количество в нем базовых блоков, тем меньше джиттер будет его анализировать для оптимизаций, тем в целом медленнее он будет работать.
А что он там конкретно оптимизирует? Разве он не переводит просто IL в машинные коды? Если программист опытный, то сможет ли что-то джиттер оптимизировать?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 14:38
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
А что он там конкретно оптимизирует?
Да почти все.
Джиттер знает железо, на котором выполняется код и генерирует наиболее подходящие для него инструкции.
Плюс может менять местами инструкции для лучшей утилизации кэша.

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Разве он не переводит просто IL в машинные коды?
Любой компилятор переводит инструкции с одного языка на другой.

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Если программист опытный, то сможет ли что-то джиттер оптимизировать?
Современные компиляторы оптимизируют намного лучше, чем 99% программистов.
Остальные 1% пишут на ассемблере или сях с ассемблерными вставками.
2
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 15:43  [ТС]
В таком случае если есть большущий метод на несколько 1000 строк, в котором нет фрагментов, которые могли бы использоваться в других методах, не нужно ли его все равно разбивать на несколько методов, чтобы джиттер смог делать оптимизацию? Или все равно в таком случае сначала компилятор сделает инлайн и потому никакого выигрыша не будет?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 15:54
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
есть большущий метод на несколько 1000 строк
Дальше можно и не читать — метод срочно нуждается в рефакторинге

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
не нужно ли его все равно разбивать на несколько методов, чтобы джиттер смог делать оптимизацию?
Тут уже не вопрос оптимизации, а банального восприятия.
Метод на 1000 строк — это кошмар.

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
и потому никакого выигрыша не будет?
Сделайте сначала человеческий рефакторинг, потом прогоните оба варианта через бенчмарк и посмотрите на результаты.
1
Эксперт .NET
 Аватар для Usaga
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
20.10.2021, 15:58
Fylhtq05, если человек пишет методы на тысячи строк, то оптимизировать он в них ничего не сможет по определению и думать ему нужно в первую очередь о порядке в коде.
1
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 16:18  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
метод срочно нуждается в рефакторинге
А какой может быть рефакторинг, если нет повторяющихся участков кода? Т.е. метод можно разбить на другие методы, но только для лучшего восприятия. Вместо разбивки метода в редакторе сделаны отступы и комментарии.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9398 / 1355
Регистрация: 21.01.2016
Сообщений: 35,431
20.10.2021, 16:33
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
А какой может быть рефакторинг, если нет повторяющихся участков кода?
Выносят не только повторяющийся код. Код может разъехаться не просто по разным методам, но и по разным классам, для разделения ответственностей или введения нужно уровня абстракций.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2021, 16:51
Лучший ответ Сообщение было отмечено Fylhtq05 как решение

Решение

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
А какой может быть рефакторинг, если нет повторяющихся участков кода?
Ну если там 1000 строк, то наверняка различные процессы свалены в одну кучу.
Начать можно с разделения этих процессов на отдельные методы, чтобы глядя на код метода даже незнакомому с кодом человеку было понятно что там происходит.
Кому интересны детали — посмотрит реализацию методов.

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Т.е. метод можно разбить на другие методы, но только для лучшего восприятия.
Именно!

Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Вместо разбивки метода в редакторе сделаны отступы и комментарии
Это, кстати, хороший ориентир при рефакторинге: вынести то, что описано комментариями/отступами в отдельные методы.
Наверняка где-то в комментарии есть и название метода.
1
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 17:27  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну если там 1000 строк, то наверняка различные процессы свалены в одну кучу.
Совершенно верно. В этом есть что-то плохое? Я только для себя пытаюсь написать программу арбитража криптовалютной биржи. Потому, какие сложности испытывал бы другой человек, читая программу (мне его было бы жалко), меня в данном случае не интересует? Забота только о производительности. И вообще непонятно, чем вынесение кода для восприятия в метод лучше чем сворачивающийся region с комментариями?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
20.10.2021, 20:29
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Забота только о производительности. И вообще непонятно, чем вынесение кода для восприятия в метод лучше чем сворачивающийся region с комментариями?
Ну можно и картоху жареную всей семьей из 6 человек есть прямо из большой сковородки, просто разделяя секторами нужные куски с помощью кетчупа. Так тоже едят.
Но все-таки чаще всего по-человечески (каждому отдельно) будет удобнее.
Так и тут - код читают люди.
0
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 21:01  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Так и тут - код читают люди.
Про картошку ничего говорить не буду, а по поводу кода непонятно, чем region хуже метода? Хотелось чтобы не рассматривали мой вопрос, как позицию. Здесь было сказано, что короткие методы джиттер оптимизирует. Это плюс к тому, чтобы большой метод разбивать на маленькие. А вот с точки зрения читабельности пока преимуществ перед region с комментариями не нахожу. Мало того, регион можно развернуть и просмотреть быстрее, чем в меню перейти к методу, что приведет к строкам в другом файле, а стрелочка вернуться назад не факт, что вернет к строке кода, с которой начат переход к методу а не к другой строке в том файле, где интересующий метод. А если в меню нажать показать метод, то это тоже уступает региону: точку останова не поставить, рефакторинг не сделать. Придется закрывать окошко и нажимать перейти к методу. Т.е. хотелось бы услышать в чем читабельное преимущество разбиения на методы перед регионами с комментариями. И как-это связано с картошкой? Еще раз - это вопрос.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
20.10.2021, 21:15
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Т.е. хотелось бы услышать в чем читабельное преимущество разбиения на методы перед регионами с комментариями.
В здравом смысле.
Метод - логически завершенный повторно используемый кусок кода, имеющий имя.
Есть один логический бизнес-процесс, состоящий из двух подпроцессов - соответственно, логически создавайте два метода, с осмыленными имена. Самодокументируемый код здесь - наше все.
А то, что там глазками навигацию сложно выполнять - так это следствие сложности разрабатываемой ИС. Вы и в регионах запутаетесь.
10 логически разных "проектов" в 10 файлах? А 20? А 50? Для такого кодописаки надо мачету...

И размер exe в случае inline-инга методов - особо не проблема. Вы размер exe основного сервиса СУБД Postgresql видели? - 9-10 MB.
В 21 веке то, где рулят микросервисы...да пофиг.
0
109 / 52 / 16
Регистрация: 09.06.2021
Сообщений: 480
20.10.2021, 21:25  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
В здравом смысле.
Угу, по определению, значит.
Цитата Сообщение от IamRain Посмотреть сообщение
Метод - логически завершенный повторно используемый кусок кода, имеющий имя.
Вот именно, повторно. А если нет повтора?
Цитата Сообщение от IamRain Посмотреть сообщение
Вы и в регионах запутаетесь.
Что уж говорить о методах, когда даже в регионах запутаюсь.
Цитата Сообщение от IamRain Посмотреть сообщение
Для такого кодописаки надо мачету...
Спасибо за совет.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
20.10.2021, 21:31
Цитата Сообщение от Fylhtq05 Посмотреть сообщение
Вот именно, повторно. А если нет повтора?
Ну так никто не заставляет ведь. Ешьте из сковороды, даже если живет один.

Полезно для ознакомления: nice to have

Добавлено через 1 минуту
ps: за 49 баксов, думаю, подойдет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.10.2021, 21:31
Помогаю со студенческими работами здесь

Как лучше передавать параметры в метод/функцию
Здравствуйте! У меня возник вопрос, посредством какого оператора передавать параметры в функцию быстрее? Если быть точнее, ByRef - это...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать что я упустил некоторые моменты,не...

Куда лучше поместить метод?
У базового класса есть наследники: классы A, B, C, D. У классов A, B, C есть один и тот же метод, который использует поля базового. Куда...

Посоветуйте как лучше разместить таблицы в сети с каким лучше доступом
Нужен совет с каким доступом лучше разместить временные таблицы в сети? если у меня таблицы формируются с TXT файла и потом создается...

Как лучше группировать объекты? Просто чем VB.NET лучше?
Я недавно установил VB.NET и столкнулся с такой проблемой: раньше, в VB6 я клал чекбоксы, бутоны на Frame контрол, потом на него еще...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru