| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Java vs .Net |
| Автор: Karadul 20.2.2012, 19:40 | ||
Такая холиварная тема
Как обстоит дела с выполнением на юнипсах? Слышал, что благодаря ключевому слову async гораздо проще писать асинхронные сетевые приложения? |
| Автор: VSB 22.2.2012, 09:46 |
| http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java |
| Автор: Karadul 22.2.2012, 10:46 |
| Там многабукав, к тому же там нет ответа на мои вопросы - не написано, что реально может Mono, и про пример кода выше. |
| Автор: Экскалупатор 22.2.2012, 12:15 |
а зачем так писать? с какой целью проводить это сравнение вообще? если "многобукав", то бери то что знаешь и используй, к чему эти холиварные вопросы? "умеет" "неумеет" всегда можно найти варианты, было бы желание... |
| Автор: Karadul 22.2.2012, 12:52 |
| Экскалупатор, тебя что-то обидело? Ищу замену яве, думаю, стоит ли переходить на сисярп. |
| Автор: 502 22.2.2012, 13:34 | ||
не помню есть ли точно такое, но есть alias
|
| Автор: Karadul 22.2.2012, 13:54 |
| 502, я имею в виду именно передать имя класса как параметр, а потом его инстанциировать. На замену фабрикам в яве, которые пробрасывают параметры конструктору. В питоне по крайней мере так можно. |
| Автор: Экскалупатор 22.2.2012, 14:24 |
нет. я задал вполне резонный вопрос, зачем так писать. мне кажется билдер будет лучше. просто, на мой взгляд, довольно странно делать какие то выводы только на основе того можно так написать или нет, можно написать по другому, добившись такого же результата. |
| Автор: Karadul 22.2.2012, 14:41 |
Кто? "Писать по-другому, добившись такого же результата" - это ява и есть, с универсальным костылем - (анонимным)КЛАССОМ, который заменяет и замыкания, и лямбды, и ссылки на класс из примера выше. Поверь мне, после питона так делать вовсе не хочется. К тому же, зная несколько довольно разных языков, в этих костылях начинаешь путаться. К тому же ни на один вопрос ты так и не ответил, зато кто-то поставил 2 минуса посту. |
| Автор: Экскалупатор 22.2.2012, 15:09 |
| ну два минуса поставить сложно... под билдером я имел ввиду паттерн который строит объекты. можешь рассмотреть ту же фабрику. чем она тебя не устраивает? ну есть еще такая штука как рефлексия, с помощью нее можно по названию. анонимный класс тут не причем. Добавлено через 9 минут и 52 секунды ты может опиши подробнее что хочется получить в результате(желательно с примерами), а то ты уперся в одну какую то возможность, а ответ может быть гораздо проще... |
| Автор: Karadul 22.2.2012, 15:35 |
| Подробнее http://forum.vingrad.ru/forum/topic-347286.html, все решилось фабрикой. Надо было следующее: серверу передается порт и класс, который инстанциируется при подключении клиента и параметром передается сокет. И про рефлексию там написано, она полностью убивает все плюсы статического языка. Билдер это фабрика? Ну по сути это КОСТЫЛЬ, который должен компенсировать отсутствие кой-чего и к которому надо привыкать после других языков, или есть какие-то преимущества перед моим примером вначале? Но это дерейл. |
| Автор: Экскалупатор 22.2.2012, 16:18 |
| у тебя название класса, экземпляр которого нужно создать, передается по сети? довольно сомнительная затея, но это мое личное мнение... так а чем фабрика по итогу не устроила? это как раз укладывается в ее назначение. у меня даже не появилось бы идеи использовать в этом месте что то другое. фабрика позволяет инкапсулировать все что нужно для создания этих классов в одном месте, что будет несомненным плюсом. а ты же хочешь в каждом случае создавать все заново, что несомненно приведет к дублированию и усложнит(и без того довольно странное) поведение... почему не подошла фабрика? |
| Автор: Karadul 22.2.2012, 17:13 | ||||
Обсуждалось в том треде же. Поэтому не хотет. В питоне такой код работает и довольно интуитивно пишется и читается:
Нде, судя по круглым глазам что там, что тут фича для статических языков довольно нестандартная. Но в сисярпе по крайней мере замыкания есть без костылей. Ладно, вернемся к OP посту. Добавлено через 12 минут и 10 секунд Экскалупатор, ну почитай же тот тред, там все описано, пример кода http://forum.vingrad.ru/index.php?showtopic=347286&view=findpost&p=2461519, а http://forum.vingrad.ru/index.php?showtopic=347286&view=findpost&p=2461663 то, что я взял. Фабрика - потому что костыль, который должен прикрыть непервоклассность классов и мне показался неинтуитивным (я до него допер не сразу), а в примере на питоне то, что хочется сделать - то и делаешь по кратчайшему пути. |
| Автор: Экскалупатор 22.2.2012, 18:27 | ||
что такое "непервоклассность классов"? что такое в твоем понимании "первоклассный класс"? вопрос интуитивной понятности отдельная тема, для меня интуитивно понятно что передавать название класса что бы потом его по этому названию искать и создавать на основе этого объект - это нелепость, для меня интуитивно понятно, что фабрика будет лучше потому, что код будет в одном месте собран, а не по всей программе, но это все мое имхо и мне так понятно, как это у тебя я не знаю. по поводу кратчайшего пути тоже весьма спорно, сколько раз сталкивался что кратчайший довольно часто не лучший, но это опять же мне так интуитивно понятно исходя из моего опыта и, опять же, попадает в область моего ИМХО. *но если бы увидел что кто то в проекте такое замутил то сразу же этот человек получил бы в бубен. ты определись что тебе надо, я думаю само собой разумеется тот факт что все языки устроены в какой то стемени похоже, но не одинаково. в шарпе скорее всего у тебя не получится сделать по "кратчайшему" в твоем понимании пути, да и я думаю тебя в этом пути никто не поддержит. |
| Автор: Karadul 22.2.2012, 20:20 | ||
First class object - значит, что его можно сохранить в переменную. В яве это только примитивные типы и обьекты.
Искать и создавать? Блин, ты упорно не понимаешь или не хочешь понять, что я хочу сделать. Не название класса (строку), а ссылку на класс. А в примере на питоне он не в одном месте? Если язык это не может - то не лучший. Ну дело не в том. Насколько я понимаю, фабрика сделана для обхода определенных ограничений статических языков, людям, знающим языки, где такое не надо, тяжело понять, что же им делать. До фабрики я дошел своим умом и не сразу. Поправь меня, если это не так. А то ты так активно против, но ни одного нормального аргумента (кроме того, что шарп похоже так не может) я так и не услышал. И вообще думай шире. Не сярпом (явой итд) единым. Похоже, есть много вещей, о которых ты не догадываешься Замечал у жавоидов подобное - несмотря на местами архаичные языковые конструкции, стоит заикнуться, например, о том, что хорошо бы в 2012-то году уже замыкания иметь, как им рвет пердак и они, истекая слюнями, начинают доказыать, что я чмо, как будто я их маму задел. Может это синдром единственного языка? С моими не очень богатыми знаниями явы и питона я не бросаюсь на людей, которым в них чего-то не хватает (разве что это из области, в которой я совсем мало понимаю). |
| Автор: Экскалупатор 22.2.2012, 23:41 |
| я не пытаюсь ничего доказывать, я пытался сказать что нужно просто определиться, любую ситуацию можно разрулить на любом языке, только разными способами, заметь я не разу не сказал что шарп хорош или плох, как и ява как и любой другой язык, статический или нет. повторяя твои слова не питоном(или любым другим языком)... то о чем ты можешь или не можешь догадаться определяется только опытом использования. мне к примеру никогда не приходилось решать задачи в которых по какой то причине могла понадобиться ссылка на класс(но не на объект этого класса). к примеру я считаю что подобная функциональность добавила бы мне проблем в проектах, хотя бы в той простой вещи что инициализация объектов будет расползаться по всему проекту. я не писал ничего на питоне, но на сколько я понял то не в одном, ты хочешь передать ссылку на класс и там, куда ты ее передал, проинициализировать объект. соответственно мест становится много. опять же может быть я ошибаюсь, но я понял это так. ))) да, я никогда не говорил что знаю все. по большому счету мне не нравится только одна вещь, это когда люди начинают все сравнивать между собой по принципу: лопата плоская и ей удобно копать, а грабли с зубцами и ими копать неудобно. и сразу же обычно следует вопрос: а как сделать так что бы у граблей все зубцы превратились в плоскость как у лопаты, что бы было удобно копать, потому что раньше я копал лопатой и мне это нравилось, но теперь я хочу копать граблями, но мне неудобно!!! пример конечно корявый, но думаю суть ясна. |
| Автор: Karadul 23.2.2012, 00:42 | ||
Можно, но зачем? ![]() Мне показалось, что твоя любовь к разрулению исходит от того, что ты другого просто не видел. Где разрулять не приходится. И ОСОБЕННОСТИ ЯЗЫКА страшны не столько сами по себе, сколько заставляют пердолиться в срачло при переходе с похожих вещей. Например, в lua нет ооп, через какие-то танцы оно эмулируется, но когда я увидел это, я решил, что я без него обойдусь - без ооп и вообще без lua. Для тебя это может быть и нормально, а мне не хочется придрачиваться к каждому языку, с которым я соприкасаюсь. Есть же общая теория, вроде ООП, которая с небольшими отличиями одинакова.
Покажи мне в моем примере, где она расползается? И чем это принципиально отличается от фабрики? Там ты тупо пробрасываешь параметры конструктору. Это намек на то, что ява/шарп для копания не предназначены, на них можно только наступать? |
| Автор: Экскалупатор 23.2.2012, 10:22 |
))) это печально. но ты упорно не хочешь понимать про что я тебе пытаюсь объяснить. пойми вещи существуют в этом мире не для того что бы находиться в соответствии с твоими ожиданиями, и языки программирования тут не исключение. я просто пытался сказать что выбор того или иного языка не должен основываться на опыте использования предыдущих языков, в каждом из них всегда можно найти свои плюсы и минусы. по теме: почитай что такое Generic Class, может быть тебе поможет. |
| Автор: kulikov 23.2.2012, 11:55 |
| Для разработки по windows лучшего средства чем .net/c# не существует в природе. Однако, не смотря на всю пародию вроде моно, технология это не кросплатформенная. Если хотите разрабатывать не только под окнами, тогда лучшее решение это ява. Да, существует много технологий, но ява самая оптимальная. Однако, лично меня, попытка преобрести хоть какие скилы на яве ввергает в уныние. Уж очень она устаревшая, сравнительно с c#. Сейчас правда есть разрабатывается проект http://habrahabr.ru/blogs/java/124494/. Это будет ЯП, больше похож на c# нежели на яву и он будет компилироваться в байт-код. |
| Автор: Karadul 23.2.2012, 11:56 | ||
Очень интересно, а на чем же он должен основываться? На удобстве рисования гуя (ну и это тоже, кстати)? |
| Автор: Karadul 23.2.2012, 12:12 |
| Видел сервера на сисярпе. Если 2 процента красноглазиков на десктопе меня не интересует, то на серверах их вовсе не 2%, особенно на low end. Отсуда вопрос - при минимальном или отсуствующем гуе можно будет запустить программу на питухоси? Я вобщем-то не против мультиплатформенности, но не ценой того, что на моей родной платформе от гуя приходится рыдать, а из программ, которые я знаю, с гуем, который можно назвать нормальным, большинство - IDE для явы Можешь привести примеры, чем шарп лучше? Как обстоит дело с совместимостью в пределах windows? На 2000 можно поставить максимум Framework 2.0. Остальные ставятся на любую винду? |
| Автор: kulikov 23.2.2012, 13:24 |
Нет. Во многих книгах по c# это и так написано, я уже не говорю об Интернете. Не ленись |
| Автор: Karadul 23.2.2012, 18:22 |
Тогда что ты в этом треде делаешь? Ах да, можно поставить .Net Framework без прав админа и зашивания в ось? Большинство фреймверков работает просто после копирования. |
| Автор: kulikov 23.2.2012, 18:38 | ||
Учу таких как ты, не ленится. А что ты делаешь на этом форуме? В школе на уроках надо сидеть.
И что с того? |
| Автор: Karadul 23.2.2012, 19:40 |
Детей своих учи. Так да или нет? |
| Автор: erm0l0v 5.3.2012, 13:30 | ||||
| Есть много способов реализовать фабрику на C# выбор конкретного способа завит от задачи. Я бы сделал так:
здесь T это тип базового класса или интерфейс который необходимо создать. В методе RegistClass регистрируем тип а в методе CreateClass создаем объект для этого типа. Кроме того есть библиотеки (например от http://unity.codeplex.com/) которые уже реализуют фабрику с кучей дополнительных возможностей. Использовать оператор new как у вас в примере насколько я знаю в C# нельзя. Вместо этого вы можете использовать например такую конструкцию:
где t это переменная типа Type |
| Автор: Karadul 14.3.2012, 04:55 |
| erm0l0v, а как передать параметры конструктору? |
| Автор: erm0l0v 14.3.2012, 08:57 | ||||||
Доступно множество перегрузок метода
Одна из них выглядит так:
Вторым параметром принимается массив объектов: это как раз и будут параметры для передачи в конструктор, а ключевое слово params позволяет использовать функцию более прозрачно:
Вот так например можно передать в конструктор переменную типа int и "Word" |
| Автор: Karadul 16.3.2012, 10:27 |
| А что будет при несовпадении типа / количества обьектов? Если исключение при выполнении, то это не нужно. |
| Автор: erm0l0v 16.3.2012, 15:18 | ||||
| Ну да будет исключение, что вполне логично. вы можете отловить исключение с использованием try catch. Но в .NET да как и в Java try catch дорогостоящая операция и если несовпадение параметров случается часто то приложение может работать медленно. Activator - это не единственный способ создания классов, я привел его в примере только потому что помнил только его, возможно вы сможете найти альтернативные способы создания которые например вместо исключения возвращают null. Я бы эту ситуацию решил бы так: Перед созданием класса проверил какие есть конструкторы с какими параметрами. Для того чтобы получить список конструкторов есть функция класса Type
функция возвращает коллекцию объектов класса ConstructorInfo у этого класса есть функция
которая информацию о параметрах, там много информации включая их тип и порядок объявления в конструкторе. Из всего выше перечисленного можно определить валидность переданных параметров. |
| Автор: Karadul 18.3.2012, 05:46 |
В статическом языке хотелось бы, чтобы такие вещи отлавливались при компиляции, а не в рантайме. Поэтому такая вещь меня категорически не устраивает. В общем, все то же, что и в яве. Интересно, почему? Есть какие-то причины, по которым это трудно сделать? |
| Автор: erm0l0v 19.3.2012, 08:16 |
| Все что статический анализатор кода может отловить он отловит, при грубой ошибке проект просто не скомпенсируется. Все остальное или очень сложно проверить или невозможно вообще. В примере который я привел в качестве параметров передаваемых конструктору используется массив. Статическому анализатору будет сложно проверить такую функцию так как сам массив может взяться откуда угодно, да хоть с генерироваться случайным образом. Да это в принципе и не нужно ведь есть юнит тесты. |
| Автор: techPro 3.5.2012, 23:16 |
| Оба этих языка программирования имеют интересную историю, потрясающие возможности и в своем развитии влияют друг на друга. Я думаю, что изучать и использовать стоит оба эти языка |