|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|||||||||||
.NET 4.x Return из метода, 3 варианта. Использовать int или byte?26.05.2017, 23:57. Показов 2279. Ответов 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,574
|
||||||
| 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
|
|||||||||||
|
14136 / 9360 / 1350
Регистрация: 21.01.2016
Сообщений: 35,180
|
|||||||
| 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
|
|
|
14136 / 9360 / 1350
Регистрация: 21.01.2016
Сообщений: 35,180
|
|
| 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 или "самодельная кодировка" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|