- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
// https://cdn.staticaly.com/gh/landawn/abacus-util/master/docs/MutableBoolean_view.html
// https://github.com/landawn/abacus-util/blob/76cb7c712d4ce2d167f9170f8d92fd9857db8f99/src/main/java/com/landawn/abacus/util/MutableBoolean.java
public final class MutableBoolean implements Mutable, Serializable, Comparable<MutableBoolean> {
/**
* Constructs a new MutableBoolean with the default value of false.
*/
MutableBoolean() {
super();
}
/**
* Constructs a new MutableBoolean with the specified value.
*
* @param value the initial value to store
*/
MutableBoolean(final boolean value) {
super();
this.value = value;
}
/**
*
* @param value
* @return
*/
public static MutableBoolean of(final boolean value) {
return new MutableBoolean(value);
}
/**
*
* @return true, if successful
*/
public boolean value() {
return value;
}
/**
* Sets the value.
*
* @param value the value to set
*/
public void setValue(final boolean value) {
this.value = value;
}
}
Тут человек изменяемый булеан сделал, что думаете? Функциональное программирование уже проиграло ООП?
softpawww 11.12.2019 02:41 # 0
bormand 11.12.2019 05:23 # +2
guest8 11.12.2019 05:29 # −999
guest8 11.12.2019 05:41 # −999
1024-- 11.12.2019 08:50 # +1
Тут уже от друзей зависит. Если они за чашкой пива обсуждают ООП и первый канал, то лучше Смешариков посмотреть.
XYPO3BO3 11.12.2019 08:58 # +2
XYPO3BO3 11.12.2019 08:55 # 0
http://govnokod.ru/16233
1024-- 11.12.2019 08:57 # +2
Her 11.12.2019 16:38 # 0
guest8 11.12.2019 17:02 # −999
bormand 11.12.2019 05:41 # 0
bootcamp_dropout 11.12.2019 10:50 # 0
guest8 11.12.2019 11:00 # −999
softpawww 11.12.2019 12:41 # 0
bootcamp_dropout 11.12.2019 13:20 # 0
то вот так же сделать с ref параметром не объявляя его заранее нельзя ни в каком языке, насколько я знаю
softpawww 11.12.2019 16:00 # +1
В дотнете так действительно нельзя, там только для out подобные вещи разрешены, но это имеет свой смысл, ибо предполагается, что в качестве ref параметра будет передаваться заранее инициализированная переменная.
В плюсах, насколько я помню, нет строгого деления между ref/out, там есть просто передача по константной/неконстантной ссылке, поэтому вполне разумно требовать наличия ранее объявленной переменной, ибо ссылка, в отличие от указателя, сама по себе не может существовать.
Пытаться как-то обойти это ограничение, значит придумывать какой-то специальный сахар для таких параметров, который бы неявно создавал переменную в куче или на стеке и отдавал методу ссылку на неё.
bootcamp_dropout 11.12.2019 16:05 # 0
softpawww 11.12.2019 16:15 # +1
softpawww 11.12.2019 16:17 # 0
guest8 11.12.2019 16:20 # −999
bootcamp_dropout 11.12.2019 16:22 # 0
guest8 11.12.2019 16:23 # −999
XYPO3BO3 11.12.2019 16:26 # 0
bootcamp_dropout 11.12.2019 16:30 # 0
guest8 11.12.2019 17:03 # −999
KaKou-To_xyu 11.12.2019 18:48 # 0
guest8 12.12.2019 02:39 # −999
Antifriz_otrabotanyi 12.12.2019 03:00 # 0
Пффь, подумаешь, проблема
guest8 12.12.2019 03:01 # −999
1024-- 20.12.2019 19:03 # 0
без деклареции в c# уже нельзя
1024-- 20.12.2019 19:06 # 0
Или это тупо нереально?
Antifriz_otrabotanyi 20.12.2019 19:14 # 0
1024-- 20.12.2019 19:47 # 0
guest8 21.12.2019 01:44 # −999
bootcamp_dropout 12.12.2019 12:05 # +1
XYPO3BO3 11.12.2019 19:43 # 0
guest8 11.12.2019 16:16 # −999
softpawww 11.12.2019 16:21 # 0
Для C# есть библиотека Optional (https://github.com/nlkl/Optional), использую её в ряде проектов как замену возврата null, если нет значения.
UPD:
guest8 11.12.2019 17:05 # −999
softpawww 12.12.2019 02:34 # 0
guest8 12.12.2019 02:40 # −999
Desktop 12.12.2019 03:00 # 0
Нужно иметь возможность выразить его средствами языка.
guest8 12.12.2019 03:03 # −999
softpawww 12.12.2019 09:14 # +2
Тут, на самом деле, есть несколько проблем.
1) Интеграция таких вещей со стандартной библиотекой настоящая боль. Приходится писать много бойлерплейта не ради реальных фич, а просто ради попытки обеспечить консистентность кода.
2) Интерфейс всех этих реализаций отличается между библиотеками существенно, то есть, если тот же linq является стандартом де факто при разработке, и все его более-менее знают, и код с ним не выглядит загадочно, то тот же Optional обладает весьма специфическим интерфейсом, малопонятным даже для человека, который работал с другой реализацией подобной библиотеки, а уж для человека, не знакомого с такими вещами, это вообще будет brainfuck поначалу.
На мой взгляд, это слишком низкоуровневая и завязанная на дизайне языка вещь, чтобы доверять её реализацию сторонним библиотекам.
Desktop 12.12.2019 15:39 # 0
Я говорю, что такие вещи должны быть выражены существующими средствами языка, а не синтаксическим сахаром или ботвой, зашитой в компилятор.
Тогда, даже если этого нет в стандартной библиотеке, реализации будут возможны и будут проще. Дальше решит "рынок".
Пример: в Свифте Optional это по сути обычный enum с двумя состояниями. Это не спецконструкция языка и это хорошо.
Но при этом нельзя заиметь свой более лучший enum с поддержкой записи типа Int?, потому что это синтаксический сахар для Optional<Int>. И это уже не так круто.
3.14159265 12.12.2019 15:36 # 0
guest8 11.12.2019 15:14 # −999
the-alator 11.12.2019 15:43 # 0
П.С. в Apache commons есть MutableInt и т д
Fike 11.12.2019 17:20 # 0
> То ли создать 1кк новых объектов на каждое изменение значения
что?
> гораздо удобнее
есть AtomicReference, который и так позволяет все это делать, и не заботиться даже о параллельных стримах.
если у вас там совсем критично с производительностью и боксинг / cas являются большой проблемой, то эта хуйня вам не потребуется, т.к. вы будете сами писать более подходящие вещи.
guest8 11.12.2019 17:23 # −999
guest8 11.12.2019 20:10 # −999
guest8 11.12.2019 20:47 # −999
the-alator 20.12.2019 11:40 # 0
Достать, изменить, установить. А с MutableInt со стороны разработчика - просто increment/add и т д.
Если приложение однопоточное, то нет причин использовать StringBuffer вместо StringBuilder. Тут я считаю так же - нет смысла использовать Atomic*** вместо Mutable*** из Apache.
То же самое - HastTable/HashMap, Random/ThreadLocalRandom
phpBidlokoder2 11.12.2019 19:45 # −1
3.14159265 12.12.2019 15:37 # 0
Думаю что ему делать нехуй.
the-alator 20.12.2019 18:20 # 0
Это как StringBuilder и StringBuffer