Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Решил перейти на С# (http://www.flasher.ru/forum/showthread.php?t=215635)

Bletraut 30.07.2018 22:09

Решил перейти на С#
 
Сейчас занимаюсь разработкой пары программ и одной игры на AIR, но в моем городе AIR не имеет перспектив, поэтому начал изучать С#. Во многом похож на as3, изучается довольно легко. Изучаю по книгам Гербета Шилда, Хейлсберга и Рихтера. Первой книгой в целом доволен, остальными двумя нет. Пугает только то, что учебник Шилда 2011 года, что как мне кажется, уже старовато. Хотел спросить есть ли какие годные книги >2016 года по С#, чтобы язык было узучать максимально легко, например, как в книге Колина Мука по as3?

GBee 31.07.2018 14:59

Цитата:

Во многом похож на as3
Ага, как самолет на машину - вроде оба транспорт и с элементами управления, но есть нюанс. Как показывает практика - лучший способ чему-нить научиться (по моему опыту) - взять проект. Когда попка подгорает, знания тоннами вливаются в голову с каждой решенной проблемой.

ZergMaster 31.07.2018 16:37

А что там изучать. Какую-нибудь статейку по особенностям языка, +задача +документация. Всё.

caseyryan 31.07.2018 19:31

Цитата:

Сообщение от GBee (Сообщение 1205758)
Ага, как самолет на машину - вроде оба транспорт и с элементами управления, но есть нюанс. Как показывает практика - лучший способ чему-нить научиться (по моему опыту) - взять проект. Когда попка подгорает, знания тоннами вливаются в голову с каждой решенной проблемой.

Так много не изучишь. Есть куча тонкостей, о которых ты сам, скорее всего даже не узнаешь (к примеру, вряд ли ты сам будешь гуглить что такое инвариантность и ковариантность и как их юзать, что такое дженерики или как устроен LINQ и т.п., ибо в as3 всего этого нет). Самый лучший вариант - все-таки читать книжки.

Bletraut, если с английским норм, то могу посоветовать книжку Joseph Albahari, Ben Albahari C# 6.0 in a Nutshell, 6th Edition (2015). Есть уже и по 7му шарпу. Но об отличиях можно и на сайте майкрософта почитать. Там в основном разные улучшения компилятора, которые позволяют, например, out переменные объявлять прямо там, где они используются, а не заранее и тип их можно не завадать, а просто прописать var, так как компилятор сам может определить тип. Есть крутые фишки по свичам и еще много вкусностей. Но все основное можно и из этой книжки узнать.
Цитата:

А что там изучать. Какую-нибудь статейку по особенностям языка, +задача +документация. Всё.
Ох блин) Даже не знаю что сказать на это) Никакая статейка не способна раскрыть всех особенностей языка, а делая проект с предыдущими знаниями, ты по-любому будешь пытаться искать аналоги в том в этих самых знаниях) В том же AS3, даже не зная о собственных крутых фишках шарпа, кокторых в as3 даже близко нет

СлаваRa 31.07.2018 20:13

для C# есть хороший инструментарий, который умеет трансформировать избыточные конструкции в современные варианты, читать книги по 6-му шарпу, когда на подходе восьмой, ну я даже не знаю.. Лично я за 5+ лет, которые я пишу на шарпе не прочитал ни одной книги по нему, и честно считаю это пустой тратой времени:)

GBee 31.07.2018 20:57

Цитата:

Так много не изучишь. Есть куча тонкостей, о которых ты сам, скорее всего даже не узнаешь (к примеру, вряд ли ты сам будешь гуглить что такое инвариантность и ковариантность и как их юзать, что такое дженерики
Куча тонкостей как раз и узнается в процессе решения задач, а что толку если знаешь про дженерики, а пихнуть их некуда. Да - я вряд ли буду гуглить то, чего я не знаю. Но если случайно в каком-нить совете натолкнусь - то конечно придется. Стековерфлоу реально больше дает, чем книжка.

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

caseyryan 31.07.2018 21:14

Цитата:

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

Лично я за 5+ лет, которые я пишу на шарпе не прочитал ни одной книги по нему, и честно считаю это пустой тратой времени
Хз, я считаю пустой тратой времени постоянные спотыкания, гугления и написание вопросов на форумах о чем-то базовом, что можно было бы быстро узнать из книжки.

п.с. Небольшой вопрос по шарпу (хотя это касается и многих других языков), для тех, кто изучал самостоятельно, без книжек (ответ писать не нужно, ибо его можно легко нагуглить, а это не интересно :D , ответьте просто для себя)
Чем отличается замыкание от короткого замыкания?

Про себя скажу, оба этих явления я знал раньше, но то, что они называются именно так, узнал из книжек

СлаваRa 31.07.2018 21:43

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

для тех кто учил c# по книжкам:
чем различается foreach цикл для Array и List?
чем различается локальная функция и short lambda
чем различается event и delegate?
чем различается if(SomeEvent != null) SomeEvent(); и SomeEvent?.Invoke()?
...

Bletraut 31.07.2018 22:43

Цитата:

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

Tails 01.08.2018 02:34

Тоже читал Шилдта, даже книгу покупал. C# Клёвый, гораздо приятнее чем Java.

Когда у тебя огромный опыт и багаж знаний, не один изученный язык, конечно, чтение подобной книги будет пустым занятием, проще сразу в справочник за ответом на конкретный вопрос. Книги больше нужны для новичков/среднячков, где расскажут про элементарные вещи + немного ооп + немного фишек по самому языку. Для среднячков могут быть интересные отдельные темы, которые посвящены принципиально новым для них вещам. Указатели, например.

caseyryan 01.08.2018 12:15

Цитата:

чем различается foreach цикл для Array и List?
чем различается локальная функция и short lambda
чем различается event и delegate?
чем различается if(SomeEvent != null) SomeEvent(); и SomeEvent?.Invoke()?
Вот как раз на все эти вопросы есть ответы в книжке Albahari) при чем в первой половине, или даже трети книги.
Цитата:

читать книги по 6-му шарпу, когда на подходе восьмой, ну я даже не знаю..
мм. А у вас на работе как только выходит новая версия языка все сразу переходят на неё? Если так, то у вас видимо, очень прогрессивная компания.
Обычно приходишь на какой-то проект, а он написан еще на бородатой версии языка, и никому нафиг не надо переходить на новую, ибо много рефакторить и неизвестно какие баги из-за этого всплывут. 6ю версию точно учить надо. У нас на работе вообще сейчас пилим проект, который еще на 4й

СлаваRa 01.08.2018 12:27

Да, у нас во всю используются возможности последней релиз версии языка.
Часть вопросов которые я задал - это вопросы из основ, они есть везде, но вот например мне интересно, что в той книге про foreach, именно в контексте вопроса и что именно написано про последний пункт. Хотя я вопросы задал не для того, чтобы померяться :)

Bletraut 01.08.2018 12:56

Когда я изучал js, то у меня была масса тупых вопросов и костыльных решений из-за того, что я не представлял возможностей языка. Прочитав несколько книг по js (на это ушло всего лишь пару недель, потому что я не заучиваю команды) глупые вопросы сразу отпали, а когда знаешь основы, то дальше гуглить. По своей практике заметил, что без знания возможностей языка и основных команд, изучение через гугл занимает гораздо больше времени.

caseyryan 01.08.2018 20:47

Цитата:

и что именно написано про последний пункт
Кусочек текста. Вообще там дофига чего написано про оператор "элвис", но мне в лом копировать из пдф из-за дурацкой прокрутки.
Цитата:

Null-conditional operator (C# 6)
The ?. operator is the null-conditional or “Elvis” operator, and is new to C# 6. It
allows you to call methods and access members just like the standard dot operator,
except that if the operand on the left is null, the expression evaluates to null instead
of throwing a NullReferenceException:
System.Text.StringBuilder sb = null;
string s = sb?.ToString(); // No error; s instead evaluates to null
The last line is equivalent to:
string s = (sb == null ? null : sb.ToString());
Upon encountering a null, the Elvis operator short-circuits the remainder of the
expression. In the following example, s evaluates to null, even with a standard dot
operator between ToString() and ToUpper():
System.Text.StringBuilder sb = null;
string s = sb?.ToString().ToUpper(); // s evaluates to null without error

Цитата:

что в той книге про foreach, именно в контексте вопроса и что именно написано про последний пункт
Там ты не найдешь именно по контексту вопроса конкретный ответ. В книжке есть подробное описание работы этого цикла, что делает компилятор при этом, про касты, боксинг и много всего. Если я сам правильно понял твой вопрос, то разница в том, что для массива тип известен компилятору сразу, и дополнительный внутренний каст не нужен. Для дженерик листа потребуется каст.
Если я не прав, поправь.

СлаваRa 01.08.2018 21:20

?. - оператор я специально привел в связке с эвентом, ибо вся фишка именно в связке.
про массив и лист, никакого каста не надо, но для массива цикл превратится в for, потому что срабатывает специальная оптимизация, а для листа будет создан итератор, вопрос был про это:)

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

Appleman 02.08.2018 00:15

Почему этот оператор называется словом "Элвис"?

СлаваRa 02.08.2018 01:23

из-за "прически" :)

caseyryan 02.08.2018 09:34

Цитата:

Почему этот оператор называется словом "Элвис"?
Цитата:

из-за "прически" :)
Я всегда думал, что это из-за того, что ?. похоже на позы элвиса, когда он всяко кривлялся возле микрофона
https://i.ytimg.com/vi/2kQfdlm_d0Q/maxresdefault.jpg
Цитата:

я еще не встречал книг где это все разбирается и описывается как и почему это применяется на практике, про элвис и евент, этот кейс имеет даже класификацию для статических анализаторов. На самом деле таких вопрос очень много)
Это мой косяк, что я не обратил внимание, что там Event написано. Этот сценарий в книге есть в разделе событий.
Цитата по элвису с ивентами
Цитата:

In multithreaded scenarios (Chapter 14), you need to assign
the delegate to a temporary variable before testing and invok‐
ing it to avoid a thread-safety error:
var temp = PriceChanged;
if (temp != null) temp (this, e);
We can achieve the same functionality without the temp vari‐
able from C# 6 with the null-conditional operator:
PriceChanged?.Invoke (this, e);
Being both thread-safe and succinct, this is now the best gen‐
eral way to invoke events.
Вкратце, элвисом можно заменить проверку на безопасность в многопоточном сценарии
Цитата:

я еще не встречал книг где это все разбирается и описывается как и почему это применяется на практике, про элвис и евент, этот кейс имеет даже класификацию для статических анализаторов. На самом деле таких вопрос очень много)
Так практика на то и практика. Есть разные кукбуки или книжки по подготовке к сертификации 70-483, но, естественно, они всего покрыть не могут

Psycho Tiger 04.08.2018 13:52

`?:` это elvis, `?.` это safe navigation operator

СлаваRa 04.08.2018 15:57

Тем, он называется Елвис оператор, но ты молодец, потому что правильный элвис - ?: тот который устраняет тернаки :)

caseyryan 04.08.2018 16:00

Цитата:

Сообщение от Psycho Tiger (Сообщение 1205790)
`?:` это elvis, `?.` это safe navigation operator

В C# нет такого оператора ?: отдельно (если не говорить о тернарных), наверное поэтому здесь элвисом называют ?.

СлаваRa 04.08.2018 16:14

скажем так, это сленг, в рамках c#)

caseyryan 04.08.2018 18:58

Цитата:

Сообщение от СлаваRa (Сообщение 1205798)
скажем так, это сленг, в рамках c#)

Кстати вот это ?: действительно похоже на прическу Элвиса)

undefined 07.08.2018 21:10

чет юнити его не понимает

caseyryan 08.08.2018 14:16

Цитата:

Сообщение от undefined (Сообщение 1205827)
чет юнити его не понимает

Потому что у тебя там старая версия рантайма подключена, наверняка еще 3.5. Зайди в Player Settings - Scripting Runtime Version и выбери более новую


Часовой пояс GMT +4, время: 14:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.