Pull to refresh

Comments 21

Используйте интерполяцию, глазки коровоточат.
Тогда это:
Console.WriteLine
            (
                "{0} ({1}; {2}) is a {3} of type {4}. It has {5} reactivity.", 
                this.Name, this.Symbol, this.Number,
                this.Category, this.Type, this.Reactivity
            );

превратится в это
Console.WriteLine($"{this.Name} ({this.Symbol}; {this.Number}) is a {this.Category} of type {this.Type}. It has {this.Reactivity} reactivity.");
Указание типа при объявлении переменной говорит о явной, а не о статической типизации.
Изучать новый язык бывает адски сложно
Как-то неправильно поставлены акценты на мой взгляд. Синтаксис любого языка можно изучить за пару дней, особенно если это уже не первый язык. Гораздо важнее понять подкапотные различия, типа работа с памятью, сборка мусора, работа с процессами, и т.п. А если уж говорить о новичках на проекте, то по моему опыту гораздо больше времени занимает изучить незнакомые фреймворки и библиотеки, и еще больше — код, написанный ранее.
Хочу посмотреть на такой же трюк где новый язык окажется не императивным, а логическим.

Статью стоило назвать
Осваиваем новые ООП языки программирования, опираясь на уже изученные ООП


Но даже такое описание не полное.
Как объяснить JavaScript программисту, что в С++/Java/C# нельзя передавать произвольное количество параметров произвольного типа за исключением крайних случаев?

printf считается крайним случаем?

Исключения лишь подтверждают правило.

UFO just landed and posted this here
Гораздо сложнее наоборот объяснить C++ программисту, что this в JavaScript указывает не на текущий экземпляр, а на контекст.
Как объяснить JavaScript программисту, что в С++/Java/C# нельзя передавать произвольное количество параметров произвольного типа за исключением крайних случаев

Если сильно хочется, то все можно:
void MyFunc1(Object ... arg) {
    ... arg[0]...arg[20]...
}
void MyFunc2(Map<String,Object> arg) {
    ... arg.get("var1")... arg.get("var2")...
}

UFO just landed and posted this here
Во втором случае у вас один аргумент, естественно.
К тому же и передавать его стоило бы по ссылке, а не по значению.
Угу, угу…
Ты весь такой из себя Java разработчик, а тебе на и Haskell.
UFO just landed and posted this here
Кажется, что чтобы изучить новый язык, иногда нужно наоборот «выключить» у себя в голове предыдущие.
Когда-то смотрел видос по руби для пхп-шников. Там чувак предлагал адаптироваться к руби методом замены, то бишь: меняем function на def, убираем { в начале методов, заменяем end в конце методов, убираем баксы и точки с запятыми… и вот вам грубо говоря руби :)

Автору (не переводчику) следовало бы самому освоить языки о которых он пишет. Если вы делаете что то вроде:


List<String> particles = new List<String>();
particles.Add("electron");
particles.Add("proton");
particles.Add("neutron");

в шарпах, при этом пытаясь его преподавать Ruby-истам, это говорит как минимум о вашей некомпетентности. То же самое можно сказать о коде на Руби:


particles = ["electron", "proton", "neturon"]
particles.push("muon")
particles.push("photon")

Когда в том и другом языке есть просто элегантнейшие и ярчайшие конструкции для такого рода операций:


var product = new []{"electron"}.Union(new [] {"proton", "neutron"})

или


product = ["electron", "proton", "neturon"] + ["muon", "photon"]

Удивлен что автор в своих примерах обошелся без goto.

Статья ни о чём. Вот интересно, кто-нибудь что-нибудь новое или полезное из неё подчерпнул?

А вообще изучение нового фреймворка на известном тебе языке часто оказывается и сложнее и интереснее одновременно, чем переход на другой язык.
Sign up to leave a comment.