Обновить
13

Пользователь

1
Подписчики
Отправить сообщение
в обществе, где воровство является практически нормой

Весь коммент — перл, но эта фраза — просто шедевр) А вот раньше, конечно, воровство не являлось практической нормой, и все люди были честными и прекрасными, а вот сейчас является, и кругом одно ворье, куда ни плюнь, а мир вообще укатился в тар-тараты и теперь мы все умрем :) А вот мы, а вот вы! А вот тогда, а вот теперь!

Да, были люди в наше время, Не то, что нынешнее племя...

Песня стара, как мир, и пелась во все века, и поется поныне, и без сомнений будет петься в будущем. Всегда обязательно найдется человек, который охотно споет ее еще раз. Я не перестаю удивляться, как люди, слыша все это в детстве от предыдущего поколения в свой адрес, читая об этом в книгах, которые писались за много поколений до них, вырастают сами и начинают рассказывать то же самое следующему поколению — и не задумываются, что что-то здесь не так и где-то они это уже проходили. А если все действительно так, и с каждым новым поколением люди и общество становятся все хуже и хуже, превращаются в воров, бандитов и безнравственных моральных уродов — то почему мы все еще не скатились к первобытно-варварскому существованию и не сожрали друг друга, поджарив на костре?
Хм, странно. Мне казалось, что такой вопрос уже был, но оказывается, это был не вопрос.
По-моему, в Индии я такое видел: две дороги соединяют два города. Одна платная, хорошо асфальтированная. Вторая — бесплатная, загруженная фурами, и с покрытием соответсвующего качества. Хочешь — плати, не хочешь — плетись за фурами, трясись по кочкам и убивай подвеску.
Молоток — это однозначно хорошо.

Молоток не может быть «однозначно хорошо». Молоток это молоток, он может быть лишь «хорошо для чего-то». Например, суп им есть неудобно, шурупы закручивать — тоже, то есть для этих целей молоток плох. А гвозди забивать им удобно, в этом он хорош. Череп проломить — тоже удобно, в этом он тоже хорош. А вот уже забивание гвоздей (в большинстве случаев) — это хорошо, а проламливание черепа (в большинстве случаев) — это плохо (если копать глубже — то плохо для того, кому его проломили, но может быть хорошо для того, кто проломил, например, в случае самообороны, иначе сам бы жизни лишился). Так что «молоток — это однозначно хорошо» — утверждение, настолько же далекое от истины, как и «биткоины — однозначно плохо». Вообще, «хорошо» и «плохо» — это упрощенные понятия для детей, которым в их возрасте пока трудно объяснить все причины и следствия, проще сказать «хорошо» и «плохо».
Ошибки копятся элементарно. Скажем, есть у вас amount = Money.fromKopecs(10), вы в течение года каждый день должны увеличивать сумму на 1%: newAmount = amount * 0.01. При вашем подходе сумма меняться не будет: Long(Long(10) + Long(10) * 0.01) == Long(10). Даже если вы сконвертируете из Money в decimal, посчитаете и сконвертируете назад в Money — вы получите все те же 10 копеек. К концу года вы украдете у кого-то 10 * (1.01 ^ 365) — 10 = 3 рубля 67 копеек, вернув ему всего лишь те 10 копеек, которые он вложил изначально.
Попробую ответить сразу на 2 ваших комментария.

1:

Другой хабровчанин развернул вам мысль, которую я тоже пытался донести:
3. Я попробую выразить мысль и скорее всего не только мою — наличествование класса Money это не плохо, но реализация с «копексами» это плохо, Money должен быть общим случаем — это decimal + currency code.

ValueObject класс — это прекрасно, это действительно позволяет отделять слонов от рублей, но зачем использовать long для хранения суммы в копейках внутри класса? Для этого существует decimal. Да и для дальнейших рассчетов это гораздо удобнее. Скажем, при рассчетах сложного процента из-за использования long через какое-то время у вас накопится такой уровень ошибки из-за округления, что никакие балансы не сойдутся. Придет клиент, посчитает сумму на калькуляторе и начнет вопить, что вы воруете у него деньги.

2:
Нет, поменяют имена двух методов на подходящие для всех валют, например HigherUnit и LowerUnit.

И будет у вас для каких-то валют LowerUnit1, LowerUnit2, а для каких-то — просто LowerUnit, так что ли? Lower Unit внутри программы вообще не нужен, для отображения в интерфейсе суммы в копейках или рублях с копейками используется концепция Value Formatter (наверняка в C# она тоже в каком-то виде существует), которая формирует из данных нужное пользователю представление. Понятно, что у вас есть legacy-код, но ведь вы затеяли рефакторинг для исправления положения — так исправляйте сразу так, чтобы избавиться от костылей, а не оборачивать их в дополнительный класс.

Сравнивать SQL с C# я бы вообще не стал. Разные это вещи.

Вещи разные, но концепция decimal у них одинаковая, и придумана она специально для денежных целей, чтобы не использовать float, который не гарантирует точности, и не городить велосипеды с int/long.
«Я, пошёл за хлебом»

А что не так? Это обращение! И повелительное наклонение! У меня только так за хлебом и получается ходить =/
В ПО, которое разрабатывает наша команда используются денежные значения в рублях и копейках. Мы изначально знали, что использование примитивов для выражения денежных значений — это антипаттерн.

Антипаттерн — это использовать денежные значения в рублях и копейках. По моему скромному мнению, конечно же.

decimal не несёт в себе никакой информации о том, что представлено этим числом.
decimal a = 10; //что это?

Я не программирую на C# и под .NET, а сужу по аналогии с другими языками и с базами данных, но гугл вот что мне выдал первой же ссылкой:

Compared to floating-point types, the decimal type has more precision and a smaller range, which makes it appropriate for financial and monetary calculations.

If you want a numeric real literal to be treated as decimal, use the suffix m or M, for example:
decimal myMoney = 300.5m;
Without the suffix m, the number is treated as a double and generates a compiler error.


То есть, 10m — это 10 рублей. 10.15m — 10 рублей 15 копеек. Зачем вообще нужно amountInKopecs/amountInRubles, если есть целая и дробная часть числа для хранения того и другого? Я за свою практику занимался разработкой нескольких финансовых приложений (причем, мультивалютных), и сейчас даже в самых извращенных фантазиях не могу себе представить, зачем в каких-то местах кода использовать суммы в копейках, а в каких-то — суммы в рублях, а потом заниматься путанными пересчетами и создавать себе другим всем лишние проблемы? А если все-таки когда-нибудь понадобится конвертировать в другую валюту — будете использовать копейки или рубли? А конвертировать будете в центы или в доллары? А для каждой валюты будете писать свой класс, где kopeks в названии функции будет заменять на cents/penny/sen и т.п.? А еще в мире до сих пор не вымерли валюты-динозавры, где бывают 1/1000 части основной единицы, 1/5, 1/12, 1/20 и даже 1/240, и несколько разных могут совместно сосуществовать в одной валюте. Ну это уже, конечно, лирика, задумки на очень отдаленный рефакторинг, которого в принципе случиться не может, потому что кому вообще эти валюты могут понадобиться? Рубль — он и в африке рубль!

P.S. Stackoverflow тоже советует использовать decimal для хранения денежных значений (там опять же про sql, но не думаю, что decimal в C# сильно отличается в этом плане).
P.P.S. Таки да, я прекрасно понимаю, что на собственноручно изобретенном велосипеде педали крутить спицы подтягивать гораздо приятнее.
Вы, кажется, в аббревиатуре опечатку допустили. Три штуки.
Вот так выглядит черный, если его несколько раз постирать
Спасибо за ссылку. Я, наконец, понял, что такое сексизм: это то, как страшные[зачеркнуто] некрасивые бабы[зачеркнуто] женщины с помощью законов в результате заставят мужиков себя е[зачеркнуто] любить вопреки всей этой вашей биохимии. Старушка мать-природа все больше и больше сдает свои позиции перед безграничием человеческой «изобретательности».

А в результате девушка с первой фотки прямо пишет, что видит причину своей низкой самооценки не в себе, а в… обществе! И снова мать-природа с недоумением чешет в затылке…
Было бы круто, если бы все «умные» приблуды питались от отдельного аккумулятора, и не высасывали батарею, отвечающую за ход самих часов.
«Шикарно» от Картмана на логотипе юзерпике улыбнуло на уровне инстинктов :)
Add: признавайтесь, ведь смысл этого юзерпика — именно в таком комменте, да? ))
Тут вообще одни тролли собрались. Если поскроллить — то в комментах тоже меняют: вниз скроллишь — бело-золотое, через некоторое время назад — уже сине-черное. И не я один это наблюдаю, так что стопудово это набег троллей на ГТ :)
Насколько я слышал, можно отравиться уксусом, если выпить залпом, и про случаи такие слышал (хотя, может врут люди, слухам верить нельзя). И неоднократно видел, как уксус хранят в бутылке от водки без этикетки. Хотел бы я почитать этот «закон о заботе о ворах», который предписывает домохозяйкам в обязательном порядке подписывать бутылки с уксусом под страхом уголовной ответственности с целью заботливо предостеречь от нечаянной смерти неосторожного домушника.
наказание не соразмерное деянию

Ну, можно утешить бедолагу премией Дарвина.

А вообще, самосуд — это если человек _специально_ с целью наказания вора-дебила бутылку яда в холодильнике держит. Но это ведь тоже доказать надо. Может, он на даче грызунов или насекомых травить собрался, он же не мог знать, что вот именно в этот момент вор к нему залезть решит, да еще и «водкой» полакомиться. А так — закон вряд ли это как самосуд будет рассматривать. Хотя, я не спец, утверждать не буду.
на маках это достаточно просто: Ctrl+Cmd+пробел

Ух ты, круто! Сколько маком пользуюсь — а до сих пор не знал о такой удобной фишке! Спасибо =)
Я, конечно, не знаток американских законов, но допустим, в одном штате станок запрещен к продаже. Человек из этого штата покупает его в другом штате (в котором его продажа не запрещена) через интернет и просит FedEx его доставить. Это будет законно?
Напильник не продвигается «в первую очередь как устройство для изготовления т.н. «нижнего приёмника» автоматической винтовки AR-15.». А вот если какой-то штат признает этот станок вне закона — то к ответу призовут FedEx. Так что их решение вполне разумно.

Информация

В рейтинге
Не участвует
Откуда
Киев, Киевская обл., Украина
Зарегистрирован
Активность