![]() |
|
IT и Связь Обсуждение "айтишных" вопросов и средств связи |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#151 | |||
My name is Exaybachay
|
![]() Цитата:
Цитата:
![]() если проверить, то у тебя там еще дискрименант неверно считается, но не суть. Цитата:
![]() на С++ у тебя (с учетом таки моего замечания) будет строчек 22-23. а с учетом вызывающего кода и вовсе больше, чем у меня. плюс если ты захочешь результат этого решения куда-то передать, тебе придется городить кучу параметров. далее, теперь посмотрим на что же собственно отличаются два кода. итак: первое и явное - на декларации. этого в моем подходе не избежать. жертва концепции, ок. второе и опять же явное - конструкторы. можно было вообще без них. но с ними удобнее. если надо один раз посчитать и куда-то все это "отправить" или просто поюзать и выкинуть, то с недефолтным конструктором удобнее. третье, и это мелочь, но на этом ты выигрываешь еще три строчки - простые вы ты пишешь без фигурных скобок. это вопрос стандарта кодописания. и под джавой и под С++ есть стандарты предписывающие эти скобочки ставить даже для таких конструкций и стандарты не предписывающие такового. три строчки. то есть в результате мы имеем твоих 25 против моих сорока, а на разницу убрана морока с рассыпухой по другую сторону API. разница в подходах видна. разница размерах кода - нет вообщем-то. KaraNagai добавил 22.06.2007 в 13:16 все пошел делать доклад на мощноученую тему хехеххее. а юрий прав вообщем-то, но это уже другая история... ![]()
__________________
митьки никого не хотят победить Последний раз редактировалось KaraNagai, 22.06.2007 в 12:16. Причина: Добавлено сообщение |
|||
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#152 |
Заслуженный Участник
|
![]()
Yuri: да, с переполнениями и граничными случаями добавляется еще кое-какой код во всех языках, но честное слово, не хочется копаться конкретно в квадратных уравнениях, потому что речь не об этом, а о лаконичности вообще.
Кстати, мой окончательный вариант на JavaScript: Код:
function qe(a, b, c) { if (a == 0) return { x1: (b == 0 ? null : - c / b) } var d = b * b - 4 * a * c; return { d: d, x1: (d < 0 ? null : (- b + Math.sqrt(d)) / (2 * a)), x2: (d <= 0 ? null : (- b - Math.sqrt(d)) / (2 * a)) } } И как ни крути, Джава - самый длинный язык. public public public... и это еще Kara не инкапсулировал данные, а объявил их public, потому что было бы еще больше кода. И пусть кто-нибудь теперь скажет что Джава хоть чем-то лучше Си или JavaScript. Ludwig добавил 22.06.2007 в 13:25 Kara, теперь предлагаю решить другую задачу, а в противовес ты покажи что-то такое, что на Джаве выглядело бы компактнее и красивее чем на Си или JavaScript, без использования спец. библиотек, конечно. Идет? Задача: опять же квадратное уравнение, но B и C меняются в программе реже чем A. Ludwig добавил 22.06.2007 в 13:48 Вот решение на JavaScript, которое позволяет один раз вызвать некую функцию с B и C, а потом сколько угодно раз вызывать другую функцию с A, но при этом не иметь никаких объектов или статических данных: Код:
function make_qe(b, c) { return function (a) { if (a == 0) return { x1: (b == 0 ? null : - c / b) } var d = b * b - 4 * a * c; return { d: d, x1: (d < 0 ? null : (- b + Math.sqrt(d)) / (2 * a)), x2: (d <= 0 ? null : (- b - Math.sqrt(d)) / (2 * a)) } } } Код:
var qe = make_qe(my_b, my_c); // затем где-то в другом месте кода можно сколько угодно // раз вычислять корни имея только A: var result = qe(my_a); Си++: он конечно же многословен, но все равно он может быть примерно вдвое компактнее, что уже немало. Последний раз редактировалось Ludwig, 22.06.2007 в 16:02. Причина: Добавлено сообщение |
![]() |
![]() |
![]() |
#153 | |
Заслуженный Участник
|
![]() Цитата:
При использовании языков без проверки типов, вместо статических проверок, которые делал бы компилятор все надо проверять руками и в рантайме. Это по-вашему хорошо? |
|
![]() |
![]() |
![]() |
#154 | ||||||
Редкий собеседник
|
![]() Цитата:
Цитата:
Цитата:
Про "квалифицированного" не буду спорить. Без работы не останеться. ![]() Цитата:
TYA добавил 22.06.2007 в 16:42 Цитата:
TYA добавил 22.06.2007 в 16:53 Цитата:
Могу тоже кое-что нацарапать, в двух вариантах на С++, с классом и без класса и конструктивную критику готов выслушать.
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple Последний раз редактировалось TYA, 22.06.2007 в 15:53. Причина: Добавлено сообщение |
||||||
![]() |
![]() |
![]() |
#155 | ||
Заслуженный Участник
|
![]()
if (result.d || result.d == 0)
// use result.d Цитата:
Что касается динамических vs. статических (это не о типах, а о компиляции), то первые имеют то преимущество, что могут реализовать лямбда-исчисление, которое невозможно или чрезвычайно сложно в precompiled языках вроде Си++. Когда функция является таким же типом данных как и целые итд, то возможны такие фокусы, как я выше показал. Так вот, Джава являясь динамическим языком, тем не менее почему-то не реализует лямбда-исчисление, и поэтому моя последняя задача будет уж точно на порядок длиннее, с учетом кода, который использует класс. Ludwig добавил 22.06.2007 в 17:05 Цитата:
![]() Только прошу всех заметить, что вариант на Джаве тем не менее не был полным, потому что в нем не было инициализации (потенциальные ошибки) и не было инкапсулирования данных (традиция). Последний раз редактировалось Ludwig, 22.06.2007 в 16:05. Причина: Добавлено сообщение |
||
![]() |
![]() |
![]() |
#156 | ||
Заслуженный Участник
|
![]() Цитата:
http://www.boost.org/doc/html/lambda.html Цитата:
а в джавной версии достаточно оставить только один конструктор с 3 переменными, а другой выкинуть вообще. |
||
![]() |
![]() |
![]() |
#157 |
Редкий собеседник
|
![]()
Ну вот приблизительно вот так... Исправлено после замечения Юрия
Код:
namespace myMath { typedef std::pair<float, float> FloatPair; inline bool FindQERoots(const float& a, const float& b, const float& c, FloatPair& rootsOut) { if (a == 0 && b == 0) /* ASSERT( a != 0 | b != 0 ); */ return false; if (a != 0) { float D = b * b - 4 * a * c; if (D < 0) { return false; } float sqrtD = sqrt(D); if (D > 0) { rootsOut = FloatPair((sqrtD - b) / (2*a), -(sqrtD + b) / (2*a)); } else { float v = -b / (2*a); rootsOut = FloatPair(v, v); } } else { float v = -c / b; rootsOut = FloatPair(v, v); return true; } return true; }; }; Код:
if (a == 0 && b == 0) return false;
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple Последний раз редактировалось TYA, 22.06.2007 в 18:29. |
![]() |
![]() |
![]() |
#159 |
Редкий собеседник
|
![]() ![]() Откуда?
__________________
Steve Jobs:"It's better to be a pirate than to join the Navy." -- Odyssey: Pepsi to Apple |
![]() |
![]() |
![]() |
#160 |
Заслуженный Участник
|
![]() |
![]() |
![]() |
![]() |
#161 | |||
Заслуженный Участник
|
![]() Цитата:
Цитата:
Ludwig добавил 22.06.2007 в 19:35 Цитата:
Последний раз редактировалось Ludwig, 22.06.2007 в 18:35. Причина: Добавлено сообщение |
|||
![]() |
![]() |
![]() |
#162 | |||
My name is Exaybachay
|
![]()
так, народ, прошу прощения, у меня тут предотъездная гонка начинается, поэтому если я не на все отвечаю, прошу прощения. пока отвечу Юре aka TYA:
Цитата:
![]() KaraNagai добавил 23.06.2007 в 11:46 Цитата:
![]() а если мы возьмем не квадратное уравнение, а реализацию понятие "аккаунт" в биллинговой системе, то я думаю вся разница между с++ и джавой испариться и останется лишь разница между вычислительными средами, в которых это все надо использовать. покамест, насколько я понимаю, единственная такая среда под веб-решения, например, где можно использовать нормальный нативный с++ и при этом не надо строить код начиная с самого нижнего уровня - это додотнетовский COM с фронтендом на ASP. весьма убогая комбинация, замечу. и код на С++ под такую комбинацию получается весьма вербозный. любое другое использование настоящего С++ в веб-решении потребует решения архитектурных проблем в то время как деньги платятся за решение прикладных. с джавой по крайней мере есть J2EE all the way down to JSP так сказать. тоже та еще каша, но по крайней мере консистентная и доступная под различными операционками. еще вчера наблюдал: человек во время презентации захотел продемонстрировать свою софтину. делал он его на маке и ниразу под виндами не запускал. тем более под вистой. презентационный комп был на висте. запустилось с пол-тычка. на чем это еще можно было бы сделать, кроме джавы? (там правда, следует оговориться, не было баз данных, но была работа с растровыми изображениями, пользовательский интерфейс и вычислительный код). KaraNagai добавил 23.06.2007 в 11:52 Цитата:
__________________
митьки никого не хотят победить Последний раз редактировалось KaraNagai, 23.06.2007 в 10:52. Причина: Добавлено сообщение |
|||
![]() |
![]() |
![]() |
#163 |
Заслуженный Участник
|
![]()
Kara:
Для меня ясно, что из всех "живых" нынче языков Джава - самый вербозный и самый ограничивающий, и обе характеристики не нравятся некоторой категории программистов. Я опрашивал друзей и знакомых, которым приходилось много писать на Джаве, и обобщая все сказанное, им не нравились главным образом две вещи: то как Джава навязывает свой стиль программирования и то что приходится слишком много писать и читать. Для тех, кто знаком с другими языками, Джава - настоящий pain in the ass, потому что они знают насколько проще мог бы выглядеть код. Если же для человека простота не является ценностью и/или если человек не имеет практики на других языках, Джава - настоящий рай. Не надо сильно думать над упрощением и не надо искать свой стиль - обе проблемы решены автоматически. Когда же джавистов прижимаешь к стенке, наглядно показывая, что нет такой задачи, которая решалась бы на Джаве лучше, чем на каком-то другом языке, то последнее за что они цепляются - переносимость. Это конечно здорово, освободиться от проблемы переносимости, но учитывая, что некоторая существенная часть приложений перекочевала в веб, переносимость уже не так актуальна как раньше. Те, кто имеет дело с серьезными веб серверами знает, что сервер целиком в руках разработчика, и там можно подкручивать свой код под конкретные версии ОС, компилятора, DBMS итд и выжать из всего этого максимум производительности. Еще раз повторю: никто до сих пор не смог показать мне красивое решение какой-то задачи, которое показало бы преимущество Джавы по сравнению с другими языками. Это невозможно, и Джава была создана не для этого. Я не сильно защищаю Си++, он тоже может быть многословным, но он хотя бы выигрывает в свободе, которую предоставляет программисту. Каждый может писать в своем стиле, и для многих это очень ценное качество. Мне наплевать на корпоративные культуры, которые предписывают писать "под одну гребенку" - это проблема больших корпораций, а не моя проблема. Вот пусть берут Джаву в зубы, и вперед - подметать плац ![]() Large Systems Suck. This rule is 100% transitive. If you build one, you suck. -- Steve Yegge И плюс я могу подписаться под каждым словом в той статье Пола Грэма о Джаве. Насчет моей задачи: правильно, ты напишешь огромный универсальный класс, который может будет использоваться целиком, а может и нет (и все таки, может ты его допишешь по всем правилам и посчитаем количество слов?). Но мое решение настолько компактно, что сравнимо со временем изучения интерфейса твоего класса ![]() (Честно говоря, в мире Джавы мне встречалась только одна очень красивая вещь. Это была виртуальная машина Джавы, написанная на Джаве, которая умудрялась запускать саму себя без помощи других VM. Конечно там был небольшой ассемблерный кусок в начале, но все равно, для компиляторного хакера вроде меня это был оргазм ![]() Последний раз редактировалось Ludwig, 23.06.2007 в 14:32. |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#164 | ||||||
My name is Exaybachay
|
![]() Цитата:
![]() Цитата:
Цитата:
Если говорить за легкие (по функциональности) веб-приложения или напротив те, которые предполагается пускать под очень серьезной нагрузкой (и с очень серьезным бюджетом), то разумеется джава в сад. Если говорить за приложения с толстым клиентом или вовсе отдельные аппликухи, то таки да джаву нафиг. Кроме случаев, когда тебе надо сразу покрыть несколько платформ за минимальные деньги. Для ресечера джава - хорошая штука, в силу гетерогенности вычислительной среды и не желания фокусироваться на ее деталях на конкретной платформе в пользу фокуса на объекте ресеча. Условно говоря сегодня сижу под виндами - завтра сяду под линукс и мне пофиг будет. Цитата:
![]() Я еще раз просил бы тебя рассказать чем ты занимаешься и занимался. С какого бакграунда так сказать вещаешь. Цитата:
![]() Цитата:
__________________
митьки никого не хотят победить |
||||||
![]() |
![]() |
![]() |
#165 | |||||
Заслуженный Участник
|
![]() Цитата:
Цитата:
Прошло больше десяти лет, в "следующей версии" ничего не исправили, а тем временем уже созрели Flash и новые стандарты JavaScript (а сколько всего еще на подходе - Silverlight например), которые забили нишу. Все они, даже майкрософтовский Silverlight, очень даже переносимые. Не могу ничего сказать за мульти-тиерные вещи, всегда избегал проектов, в которых упоминается это слово :) Еще надо бежать без оглядки от слова "методология" в любых сочетаниях - от таких проектов пахнет армейскими порядками, сложными людскими иерархиями, спецификациями и отчетами, которые никто не читает, итд :) Цитата:
Цитата:
Цитата:
Или возьми браузер - довольно ёмкая задача, целая операционная среда казалось бы, но взгляни на Internet Explorer - как он красиво разбит внутри на уровни. (Наверное единственный случай, где можно взять пример с Майкрософта.) |
|||||
![]() |
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщ. |
Ирландеи не хотят учиться на IT. | Benjamin | Общие темы | 88 | 26.06.2007 14:13 |
Поехать в Ирландию учиться | igorr | Образование | 4 | 29.03.2007 22:13 |
нашли где учиться... | AVK | Само приползло | 6 | 13.03.2007 00:27 |
где учиться.. | mary | Образование | 33 | 12.11.2005 09:47 |
Где учиться на бухгалтера и др. вопросы | Anonymous | Образование | 8 | 07.08.2003 19:52 |