Подтвердить что ты не робот

Как начать с scala

Я разработчик .NET, и я хотел бы немного расширить свои горизонты и после проверки современных тенденций решил попробовать Scala. Не могли бы вы посоветовать хорошую стратегию, чтобы начать с нее? Должен ли я сначала изучить Java? Какой источник или справочник я должен прочитать? Существуют ли какие-либо проекты ОС для практики Scala и растут на них?

Спасибо, Доминик

4b9b3361

Ответ 1

Вы можете получить первое впечатление, посетив Просто Scala, где у вас есть онлайн-переводчик.

Абсолютная классика Scala для Java Refugees, которая изначально была написана для людей, пришедших с Java, но будет весьма полезна для вас, учитывая то, насколько схожи основы из С#/Java.

Вам не нужно сначала изучать Java, но вам нужно, чтобы установленный и работающий среда исполнения Java была установлена ​​и работала.

Затем перейдите в http://www.scala-lang.org/downloads и загрузите соответствующий пакет для своей операционной системы (я всегда предпочитаю ночные сборки Scala, у них больше ошибок чем последняя стабильная).

После этого запустите Scala REPL, который в основном "Просто Scala в автономном режиме" (просто Scala также использует Scala REPL за крышками). Даже многие программисты Java сначала используют Scala REPL для прототипов.

Если вы предпочитаете книги для изучения, я могу порекомендовать Программирование в Scala (второе издание) Мартина Одерского (если вы начнете с точки зрения дизайна языка и хотите "справочник" ). Есть и другие, такие как "Программирование Scala", которые больше ориентированы на новичков, но лично я нашел "Программирование в Scala" превосходным и узнал Scala только с этой книгой.

Хороший способ запуска Scala работает с классами коллекции. В последнее время .NET добавила кое-что похожее на методы LINQ и расширения, поэтому вам будет легко подобрать.

Небольшой пример, чтобы вы начали:

//Define a class with some properties
case class Person(name: String, var age: Int, spokenLanguages: String*)

//Create some persons
val joe = Person("Joe", 42, "English","French","Danish")
val doe = Person("Doe", 23, "English","German")
val don = Person("Don", 11, "Italian","French","Polish")
val bob = Person("Bob", 17, "German")

//Access a property
joe.name

//Don had his 12th birthday!
don.age = 12

//Put the persons into a list
val persons = List(joe, doe, don, bob)

//Divide the list into minors and adults
val (minors, adults) = persons.partition(_.age < 18)
//Get the total age of all persons
val personsTotalAge  = persons.map(_.age).sum
//Return a list with only those speaking English
val englishSpeakers  = persons.filter(_.spokenLanguages.contains("English"))
//Same as the example above.
val englishSpeakers2 = 
  for{ person   <- persons
       language <- person.spokenLanguages 
       if language == "English"
  } yield person

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

Некоторые примеры поддержки Scala XML:

//The shoppingCart for breakfast
val shoppingCart = <list>
                     <item><name>Tomatoes</name><price>0.30</price><amount>4</amount></item>
                     <item><name>Eggs</name><price>0.15</price><amount>10</amount></item>
                     <item><name>Bread</name><price>2.20</price><amount>1</amount></item>
                   </list>

//How much does it cost?
val total = (shoppingCart \ "item").map(i => (i \ "price").text.toDouble * (i \ "amount").text.toDouble).sum

//This is a Symbol
val sym = 'SomeSymbol

//I'm too lazy to use Strings for XML! (Example for implicits)
implicit def symbol2string(symbol: Symbol) = symbol.name

//Now I can use Symbols too!
val total = (shoppingCart \ 'item).map(i => (i \ 'price).text.toDouble * (i \ 'amount).text.toDouble).sum

Ответ 2

Вам не нужно сначала изучать Java. Вы знакомы с функциональным программированием? Если да, вы должны быть в состоянии быстро вскочить. В любом случае, вот некоторые мысли о том, как вы можете узнать Scala:

  • Получите хороший справочник. Я рекомендую программировать в Scala от Odersky, Spoon и Venners. Я считаю это одной из самых полных книг Scala.

  • Как и при изучении любого нового языка, попробуйте написать несколько небольших приложений, используя Scala. Если вы не функциональный программист, вы можете запрограммировать его в другой парадигме, но сейчас все в порядке. Попробуйте написать свою программу, не используя "var, (используйте val вместо)", не используя циклы, и сводя к минимуму изменение состояния в целом.

  • Используйте sbt для создания вашей программы. Я не решаюсь рекомендовать это, потому что вам нужно изучить новый инструмент для написания вашей программы. Но мне тоже очень нравится писать приложения Scala. И многие проекты Scala используют sbt, похоже.

  • Также просмотрите этот комментарий и эту тему в целом, чтобы помочь вам перейти на Scala. Борьба с привычками, создаваемыми Java при переносе на Scala

Ответ 3

Java в качестве языка не требуется для начала с scala (и в любом случае сама java очень похожа на С#, или на самом деле это наоборот). Как только вы начнете делать продуктивные вещи с помощью scala, вы будете взаимодействовать с большим количеством java-библиотек и узнаете, что java-мир - это гораздо более широкая галактика более или менее стандартных библиотек, чем .net-world, где много вещей, которые вам нужны, находятся непосредственно в стандартных библиотеках .NET. Вы можете узнать их, как вы идете, но не из java фона, опыт может чувствовать себя подавляющим. Это было бы то же самое, если бы вы начали изучать Java, хотя.... Другие специфические для Java вещи, которые вам, возможно, придется изучать, касаются того, что дженерики гораздо менее эффективны в JVM и как scala пытается обойти это.

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

Создание фундамента

  • Для функционального программирования я бы рекомендовал читать SICP (он онлайн и бесплатно).
  • Пока вы изучаете java, попробуйте взглянуть на F #. Это хороший язык, он хорошо документирован и "живет" в экосистеме .NET.

обучение scala

Ответ 4

Если вы хотите узнать Scala, вам будет намного лучше обслуживать обучение Scala и поднять Java, который вам нужен, когда вы идете. Вам не нужно изучать Java, чтобы начать использовать Scala.

Хорошим местом для начала будет чтение этого вопроса, в котором перечислены большинство доступных в настоящее время книг Scala.

https://stackoverflow.com/questions/3359852/scala-programming-book/3360308#3360308

Ответ 5

Я не думаю, что вам нужно знать Java, чтобы начать работу с Scala. Однако полезно знать широкие штрихи, потому что большинство документов Scala, которые я прочитал, ссылаются на функции или ошибки Java.

Что касается проектов с открытым исходным кодом, вы можете посмотреть Github для проектов Scala. Большинство проектов с открытым исходным кодом Scala, как правило, являются структурами.

Что касается книг, я нашел и книгу Artima, Программирование в Scala, и Pragmatic Programmers, Programming Scala, очень хорошо.

Ответ 6

В дополнение к остальным: напишите простые программы на некоторое время и полностью игнорируйте расширенные функции Scala. Только двигайтесь туда, когда вы хорошо разбираетесь в основах, функциональной парадигме и системе типов.

Ответ 8

Twitter (один из поклонников scala) недавно представил свой собственный scala полный учебник - Scala School. Это потрясающий гид, который я рекомендую всем начинающим scala.

Scala школа была начата в виде серии лекций в Твиттере для подготовки опытных инженеров, чтобы быть продуктивными программистами scala.... Мы думаю, что имеет смысл приступить к обучению scala не так, как если бы это улучшенная Java, но как новый язык. Опыт Java не ожидается. Фокус будет вокруг интерпретатора и объектно-функциональный стиль, а также стиль программирования, который мы делаем Вот. Основное внимание будет уделяться ремонтопригодности, ясности выражения и использования системы типов.

Большинство уроков не требуют программного обеспечения, кроме scala REPL. читателю предлагается следовать за ним и идти дальше! Используйте эти уроки как отправная точка для изучения языка.

Ответ 9

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

http://vigtig.it/blog/

Вы должны попробовать, часть 2 почти закончена:)

Ответ 10

Загрузите и установите Apache Maven. Используйте его, чтобы создать пустой проект Scala и написать классическое приложение Scala hello world. Это потребует, чтобы вы сконфигурировали файл pom.xml в каталоге проекта, который создает Maven.

Затем запустите mvn compile снова и снова, исправляя ошибки до компиляции.

Затем запустите mvn package, пока не пройдете все unittests.

И, наконец, запустите mvn scala:run

После создания реального проекта scala: run имеет возможность выплюнуть полную команду Java, необходимую для ее запуска из оболочки script или пакетного файла.