Вы меняете способ мышления при переходе между Java и C # - PullRequest
6 голосов
/ 08 октября 2008

Это вопрос для всех, кто имеет удовольствие работать на Java и C #.

Считаете ли вы, что вам нужно переключать умственный контекст, когда вы переходите от одного к другому?

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

Это больше, чем я испытывал при переходе между любыми другими языками программирования.

У кого-нибудь есть советы, как заставить ваш мозг работать по-другому для языков, которые так похожи?

Ответы [ 5 ]

6 голосов
/ 08 октября 2008

Да, мне нужно переключить ментальный контекст - потому что LINQ недоступен в Java: (

Помимо этого, есть такие мелочи, как foreach (X x in y) против for (X x : y), которые часто сбивают меня с толку, но в противном случае огромное количество иначе.

Что касается совета, заставляющего ваш мозг работать по-другому: не поддавайтесь искушению использовать соглашения об именах другого языка. Я считаю, что использование имен методов в верблюжьей оболочке в Java, например, является хорошим толчком для моего мозга.

РЕДАКТИРОВАТЬ: Различия с точки зрения дженериков важны и могут иногда быть деформирующим мозг тоже.

3 голосов
/ 08 октября 2008

Разница в том, как работает сравнение равенства строк между Java и C #, - это одна вещь, которую необходимо учитывать, особенно при переходе от работы в C # к работе в Java.

В C # вы можете выполнить сравнение значений для двух string экземпляров с помощью оператора ==:

// C# string value comparison example
string string1 = GetStringValue1();
string string2 = GetStringValue2();

// Check to see whether the string values are equal
if (string1 == string2) 
{
    // Do something...
}

В Java оператор == выполняет сравнение (не значение) сравнения строк, поэтому вам необходимо использовать метод equals():

// Java string value comparison example
String string1 = getStringValue1();
String string2 = getStringValue2();

// Check to see whether the string values are equal
if (string1.equals(string2)) 
{
    // Do something...
}

Итог: при сравнении строк в Java не забывайте, что оператор == не выполняет сравнение на равенство значений, как это происходит при сравнении строк в C #. (То же самое относится и к оператору !=.)

3 голосов
/ 08 октября 2008

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

«Детали» могут действительно помочь вам, например, понять, как работает модель памяти или как ваша среда выполнения выполняет оптимизацию. Обладая глубокими знаниями модели памяти среды выполнения, методов сбора мусора, модели потоков и т. Д., Вы можете значить изменений в мышлении и разработке программного обеспечения.

Я не могу разумно сравнить детали Java и C # на этом уровне, но я могу сказать, что многие вещи, которые я делал бы в Java, мне некомфортно или неуверен, если я могу сделать в C #, потому что я не понимаю его низкоуровневые детали. , Это влияет на код, который я пишу для всего, от взаимодействия между графическим интерфейсом и рабочим до управления памятью.

Я обнаружил, что лучший способ справиться с различиями в Java и C # - просто думать о них как о совершенно разных языках - избегайте ловушек «C # и Java по сути один и тот же язык с разными именами классов».

3 голосов
/ 08 октября 2008

Я считаю, что самые сложные переключатели связаны с обобщениями (что лучше для C #), делегатами (какой-то тип Java-хаков с анонимными внутренними классами) и событиями (которых нет в Java)

Я считаю, что уверенность в том, что вы используете идиомы языка (т. Е. Использование делегатов вместо создания интерфейса в C #), поможет вам быстро освоиться.

2 голосов
/ 08 октября 2008

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

C # в .Net 1.1 выглядел гораздо более похожим, но теперь в C # 3.0 я использую делегаты, обобщенные элементы и особенно конструкции API, такие как словари, гораздо больше, чем когда-либо в Java. Я все больше и больше использую функциональные аспекты C #, работая над изучением F # (сейчас я пишу об этом, или OCaml действительно заставляет меня изменить свое мышление).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...