34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334

Какой вариант кода правильнее и эффективнее использовать?

22.07.2017, 01:53. Показов 1132. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первый или второй вариант, и вообще есть ли принципиальная разница, между ними?
C#
1
2
3
4
5
6
7
8
9
10
11
List<string> files = new List<string>();
GetFolderFiles(files);
 
private List<string> GetFolderFiles(List<string> files)
{
     files.AddRange(...);
     ...
     files.AddRange(...);
 
     return files;
}
C#
1
2
3
4
5
6
7
8
9
10
11
List<string> files = GetFolderFiles();
 
private List<string> GetFolderFiles()
{
     List<string> files = new List<string>();
     files.AddRange(...);
     ...
     files.AddRange(...);
 
     return files;
}
И как реализовать такой вариант использования?
C#
1
List<string> files = new List<string>(GetFolderFiles());
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2017, 01:53
Ответы с готовыми решениями:

Какой вариант лучше? 6 похожих строчек кода vs вызов функции с использованием лямбда-выражения
delegate void изменить &lt;T&gt;(T элемент, bool включить); void Управлять&lt;T&gt;(bool включить, изменить&lt;T&gt; действие, params T элемент) ...

Считывание файла: какой из приведенных методов эффективнее
у меня есть 2 класа которые считывают даны с 1 файла но делают это по разному: Вопрос: какой делает это ефективные ? клас№1 ...

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

17
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
22.07.2017, 02:06
Оба неверные и не скомпилируются. Что в итоге тебе нужно? Зачем тебе такой вариант использования?
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
22.07.2017, 02:29  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Оба неверные и не скомпилируются. Что в итоге тебе нужно? Зачем тебе такой вариант использования?
Что значит не скомпилируются? я только что выдернул код из рабочей проги, и сделал обрезание лишнего кода)
Если так интересно то вот тело, тут просто получение файлов в каталоге.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
SearchOption so = sf.cbSearchSubfolders.Checked ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
if (sf.cbFileMask.SelectedIndex == 0 || sf.cbFileMask.SelectedIndex == 2) 
     files.AddRange(Directory.GetFiles(Settings.lastSearchPath, "*.txt", so));
if (sf.cbFileMask.SelectedIndex == 0 || sf.cbFileMask.SelectedIndex == 1)
     files.AddRange(Directory.GetFiles(Settings.lastSearchPath, "*.tmp", so));
if (sf.cbFileMask.SelectedIndex == 0 || sf.cbFileMask.SelectedIndex == 3)
     files.AddRange(Directory.GetFiles(Settings.lastSearchPath, "*.ini", so));

Просто в голову моча стукнула), хочу знать в чем принципиальная разница есть ли она?
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
22.07.2017, 02:40
Первый вариант не будет работать, потому что вызов GetFolderFiles во 2 строке висит в воздухе
Второй вариант — потому что инициализацию полей можно делать только статическими методами
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
22.07.2017, 02:49  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
вызов GetFolderFiles во 2 строке висит в воздухе
инициализацию полей можно делать только статическими методами
А вот ты про что, я забыл сказать что те строчки, располагаются в другом методе откуда вызывается GetFolderFiles, ну в общем это не поля)
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
03.08.2017, 11:04  [ТС]
Ну так что никто не скажет какой вариант лучше?, мне что-то кажется что первый вариант использования вызова метода производительнее будет)
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
03.08.2017, 11:37
Fakels,
1 метод) мы можешь передать уже наполненный список и его дополнит новыми ( или дублями если такое будет уже) значениями
2 метод) список всегда будет новым
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
03.08.2017, 11:41
Fakels, оба варианта принципиально одинаковы.

Второй вариант немного "правильнее" только в том смысле, что возвращает собственноручно созданный список, а не использует сторонний, который может содержать что-то не связанное с файлами или быть неинициализированным (null). Т.е. это только с точки зрения архитектуры.

В плане производительности разницы не будет, ибо всё тоже самое, только порядок действий немного отличается.
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
03.08.2017, 19:12  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
В плане производительности разницы не будет, ибо всё тоже самое, только порядок действий немного отличается.
Почему не отличается?
В первом случае мы передаем ссылку на созданный объект, во втором создается и инициализируются два объекта и один из них потом уничтожается сборщиком.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
03.08.2017, 20:30
Вы не там ищите проблему. Оба подхода не ахти, но первый особенно. Либо меняйте название метода, либо тот, кто будет пользоваться вашим методом рехнется Изменение объектов, которые поступают в метод через аргументы, должно быть очевидным для пользователя. Он отправляет данные и ожидает на выходе результат, а вы меняете исходные и возвращаете ему. Зачем? для создания цепочных вызовов? Метод должен вернуть файлы, а добавлять их в какую-то коллекцию или что-то другое с ними делать - это уже не его дело. По семантике метод GetFolderFiles должен вернуть файлы какой-то папки. Какой? Не ясно. Исходя из названия метода сделайте хотя бы так GetFolderFiles(string path) или меняйте название на более конкретное.
Я понимаю, что вы хотите написать более оптимизированный код, но тот выигрыш, за которым вы гонитесь, ничтожен по сравнению с теми проблемами, которые он породит. Да, вы пока работаете один и проект небольшой. Но стоит взяться за что-то крупное или же начать работать в команде, то это даст о себе знать.
1
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
04.08.2017, 02:43
Fakels, передача одного параметра идёт через регистр процессора, а это настолько быстро, что разницу в «скорости» не увидеть даже под микроскопом.

Что и с чего вдруг во втором случае сборщиком мусора уничтожается я не понял.

sldp, приём с возвращением изменённого параметра довольно распространён. Другое дело, что конкретно в данном случае принимать внешнюю коллекцию особого смысла не имеет. Разве что автор планирует завести несколько схожих методов, результаты работы которых он хотел бы сложить в одну коллекцию без дополнительного копирования из промежуточных коллекций...
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
04.08.2017, 02:57  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Что и с чего вдруг во втором случае сборщиком мусора уничтожается я не понял.
List<string> files = new List<string>(); вот это вот)
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
04.08.2017, 03:05
Fakels, серьёзно?
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
04.08.2017, 03:47  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Fakels, серьёзно?
В серьезных книжках так написано, же не вру)

вот к примеру
C#
1
2
3
4
5
6
7
8
9
public void start() { 
    List<string> files0 = GetFolderFiles();
}
private List<string> GetFolderFiles()
{
     List<string> files1 = new List<string>();
     files1.Add("ВАСЯ");
     return files1;
}
тут будет два объекта(files0 и files1) создано или один?
если два то, что files1 так и останется на куче висеть без дела?
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
04.08.2017, 04:45
Цитата Сообщение от Fakels Посмотреть сообщение
тут будет два объекта(files0 и files1) создано или один?
Один тут будет создан. И ссылка на него будет возвращена в как результат метода
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
04.08.2017, 05:59
Цитата Сообщение от Fakels Посмотреть сообщение
В серьезных книжках так написано, же не вру)
Вы либо не по С# книгу читали, либо поняли не правильно.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
04.08.2017, 08:59
Usaga, Да, но не для подобного типа методов. По этому я и говорю, что нужно либо переименовывать метод, либо менять подход
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,479
04.08.2017, 09:22
sldp, ну да, с такой подачей "GetFolderFilesList" звучало бы более правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.08.2017, 09:22
Помогаю со студенческими работами здесь

Какой контейнер в STL и для чего эффективнее использовать?
Какой контейнер в STL и для чего эффективнее использовать? И почему

Как правильнее и эффективнее реализовать перевод минут в часы и минуты?
Здравствуйте недавно начал изучать C++ смотрю примеры в книги, а на те примеры которые в учебнике нет ответов сверяюсь с их решение у вас...

Какой вариант конструктора использовать правильней?
Два примера кода, какой из них использовать более корректно и профессионально? 1) card(){ } card (deck_1 value_1, deck_2...

Какой вариант кода лучше ?
Я плохо разбираюсь в асме, и хотелось бы услышать мнение от профессионалов, какой из вариантов будет на много эффективней и быстрее...

Какой синтаксис эффективнее?
Здравствуйте! Может кто-нибудь знает, или есть соображения на тему как правильно составлять сроку со значениями переменных, с точки зрения...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru