|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|||||||||||
.NET 4.x Return из метода, 3 варианта. Использовать int или byte?26.05.2017, 23:57. Показов 2344. Ответов 11
Метки нет (Все метки)
К примеру, нам нужно возвращать из метода 3 варианта, bool нам не подходит, так как больше 2-ух, стоит ли использовать byte вместо int для какой-либо пользы(оптимизация, экономия озу и т.д). Ибо byte 0-255, а int -2,147,483,648 - 2,147,483,647
0
|
|||||||||||
| 26.05.2017, 23:57 | |
|
Ответы с готовыми решениями:
11
Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}? Варианты конвертации bool/byte/int в byte/int |
|
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||
| 27.05.2017, 00:12 | ||||||
|
Defences,
Перечисление подойдет?
1
|
||||||
|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|
| 27.05.2017, 00:20 [ТС] | |
|
Даценд, спасибо, все же есть разница между byte или int? enum это лишний код, ведь проще при написании метода сразу объявить возвращяемые данные.
P.s нужно возвращать из ментода Да/Нет/Не знаю, bool охватывает только два Да/Нет. Значит будем использовать int 0 - Да 1 - Нет 2 - Не знаю Меня интересует, а не лучше будет создавать не int ради 3 вариантов возврата 0,1,2 а short или вообще byte?
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
||||||
| 27.05.2017, 00:30 | ||||||
|
Nullable bool?
0
|
||||||
|
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
|
||||||||
| 27.05.2017, 00:37 | ||||||||
1
|
||||||||
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|
| 27.05.2017, 00:41 | |
|
Даценд, дико извиняюсь, но все ж таки, чем лучше то?
0
|
|
|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|||||||||||
| 27.05.2017, 04:46 [ТС] | |||||||||||
|
Даценд, мне тоже интересно, ибо если дело обстоит как и с переменными, то для создания
0
|
|||||||||||
|
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
|
|||||||
| 27.05.2017, 05:12 | |||||||
К тому же, ответ из метода ВСЕГДА вернётся в регистре процессора, а он 32\64 битный (зависит от архитектуры винды). Так что экономии ОЗУ (как и траты) - нуль.Правильной практикой является использование перечислений (Enum), как и было выше посоветовано. "Лишенего кода" всего несколько строк, в замен же вы получаете повышенную читабельность кода и самодокументированность сигнатуры метода. Т.е. гляда на метод static MyEnum GetVariant(int x) вы уже точно можете сказать, что именно он вернёт, чего не скажешь про вариант static int GetVariant(int x). Если вы считаете, что это лишнее и вы будете помнить что может вернуть метод, то я вас расстрою: это "помнить" улетучивается очень быстро, а сторонний программист вообще не в курсе изначально.К тому же, если вы любите экономить там, где это невозможно, то имейте в виду, что Enum - тип значащий (по умолчанию Int32) и его тип можно явно задавать:
1
|
|||||||
|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|
| 27.05.2017, 05:33 [ТС] | |
|
Usaga, а если таких методов много, где возвращается 3 или более и они похожи, можно ли сделать вспомогательный static class где будут хранится enum?
Определить состояний 10 и оттуда черпать для всех методов, где это требуется, какой-то метод возвращает только 4, другой 8 и т.д
0
|
|
|
14314 / 9400 / 1355
Регистрация: 21.01.2016
Сообщений: 35,452
|
|
| 27.05.2017, 06:24 | |
|
Defences, зачем перечисления прятать в статичный класс? Пускай просто висят в пространстве имён и будут доступны всем. Или я не правильно понял ваш вопрос?
1
|
|
|
|
|||||||||||||
| 27.05.2017, 10:46 | |||||||||||||
Сообщение было отмечено Defences как решение
Решение1) Самое главное это не синтаксис и не объем памяти. Главное - это семантика программы, ее смысл и понятность. ООП придумано не для машины, а для человека. Компьютер одинаково понимает и ассемблер и C# - ему все равно. А вот человеку - не все равно. Поэтому ваша программа в первую очередь должна быть понятной человеку. 2) Теперь посмотрим на варианты возврата byte и int (пока не будем трогать техническую сторону). Эти варианты не годятся потому что они не отражают семантику возвращаемого значения. Вы сами пишите:
3) Далее, вариант bool? также плох. Да, он может принимать три значения, но смысл этих значений - совершенно другой. Здесь будет нецелевое использование значений. Этот вариант еще хуже чем int потому что у чисел нет особого значения, а у bool? - есть вполне конкретные значения - true, false и null. И они не совпадают с теми, которые нужны вам. То есть вы не просто не помогаете внешнему читателю кода, а еще и запутываете его. Кроме того, здесь проблема еще и в том, что если вы в будущем захотите возвращать не три а более значений, то bool? станет точно непригодным для использования. 4) И наконец enum - это как раз тот механизм который вам нужен. Потому что он передает семантику:
Я так понимаю, вас смущает то, что для этого нужно создавать отдельный класс(enum), и что это лишняя работа? Это не так. Представьте себе ситуацию - вы разработали программу и уволились. А вместо вас пришел новый программист. Откуда программист узнает что означают все эти int, byte или bool? Ниоткуда. Вам придется ему писать тех документацию - типа "0 - Да, 1 - Нет, 2 - Не знаю". Но если это все равно придется писать, то не легче ли это сразу написать в коде - в виде enum? Ваш код должен быть понятен и очевиден сам по себе, должен быть самодокументированным. Что бы любой человек, взглянувший на него легко понял, что код делает, какие значения возвращает и т.д. Именно для этого и необходимо enum. Теперь что касается технической стороны вопроса. Как уже писали - при возврате значений по любому возвращается машинное слово (32 или 64 бита) независимо от типа (хоть int, хоть byte). Поэтому здесь нет экономии. Существенная разница между byte и int может быть только при хранении этих величин и в больших масштабах. То есть если бы у вас был массив на сотни миллионов значений, тогда было бы уместным думать о том, хранить это в byte или int - разница была бы в 4 раза. Но это не ваш случай. Вариант с bool? еще хуже, потому что этот тип является ссылочным типом-оберткой, и он занимает в памяти не 1 байт и не 4 байта а намного больше (не менее 16 байт). Но опять же это было бы важно только при хранении больших объемов данных. Для простого возврата из метода это не имеет особого значения. Поэтому вам нужно сделать enum, перечислить в нем варианты значений, четко передавая их смысл. Если вы эти значения собираетесь хранить в больших объемах - enum можно унаследовать от byte для экономии памяти.
6
|
|||||||||||||
|
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
|
|
| 27.05.2017, 11:09 | |
|
Defences, А что, если не секрет, вы пишете? что за методы? может вы изначально делаете не так.
Плевать на ООП, как предлагаете вы, нужно только тогда, когда в профилировщике вы нашли узкое место в плане производительности или памяти, которое нужно оптимизировать.
0
|
|
| 27.05.2017, 11:09 | |
|
Помогаю со студенческими работами здесь
12
Преобразовать byte[] в float или int Что делает Read(byte[] buffer, int offset, int count) метод класса Stream Byte to int или "самодельная кодировка" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|