1

Тема: SCALA

Всім привіт! Почну відразу з проблеми. Отже, в університеті на першому курсі системного аналізу ми вивчаємо функціональну мову програмування SCALA. Впринципі коди готових програм я розумію непогано, програму можу прогнати і дійти до потрібного результату за вказаним алгоритмом. Але не получається самому писати якісь проги, так як я звик до імперативних мов програмування. Допоможіть, будя ласка!!!! Можливо, є якась теорія для хорошого розуміння побудови програм на SCALA????

2

Re: SCALA

Невже в інтернеті немає літератури по Скалі? Чи тобі потрібна НЕ агломовна?

3

Re: SCALA

Я не володію настільки добре англійською, а саме технічною лексикою, щоб читати англомовну літературу.

4

Re: SCALA

Є таке: http://uk.wikibooks.org/wiki/Scala

5

Re: SCALA

Що, ніхто не пише на scala? Така приємна річ, я вам скажу.

6

Re: SCALA

Потрохи оцифровую свій конспект курсу по Scala на Coursera. Може комусь пригодиться.

7

Re: SCALA

Приземлився на проект зі Scala, тому некробампну тред.

По чому ознайомлююся з мовою:

Мова доволі прикольна, мені після експериментів з Lisp'ом заходить.

Подякували: leofun01, Tarpan87, P.Y.3

8

Re: SCALA

Просто лишу це тут.

Тест веб-сервера
import java.net.HttpURLConnection.HTTP_OK

import com.sun.net.httpserver.{HttpServer, HttpContext, HttpExchange}
import java.net.InetSocketAddress
import java.io.OutputStream

object Main extends App {
  println("Запускаємо сервер…")

  val server: HttpServer = HttpServer.create(new InetSocketAddress("localhost", 8500), 0)
  val context: HttpContext = server.createContext("/")
  context.setHandler(Main.handleRequest)
  server.start()

  def handleRequest(exchange: HttpExchange) = {
    val response: String =
      """<!DOCTYPE html>
         <html xmlns="http://www.w3.org/1999/xhtml">
         <head>
           <title>HTTP test server</title>
         </head>
         <body>
           <h1>Вітаю</h1>
           <p>Я запустився.</p>
         </body>
         </html>
      """
    exchange.getResponseHeaders().set("Content-Type", "application/xhtml+xml; charset=utf-8")
    exchange.sendResponseHeaders(HTTP_OK, response.getBytes().length)
    var output: OutputStream = exchange.getResponseBody()
    output.write(response.getBytes())
    output.close()
  }
}

Scala — це як Java, яку приємніше писати. А ще страшенно нагадує Rust. Тобто так, навпаки: Раст, видно, сильно надихнувся Скалою.

Подякували: leofun011

9 Востаннє редагувалося bebyk (14.11.2022 19:57:48)

Re: SCALA

Завдання PrintMessages з книги Hand-On Scala Programming. Залучає просту рекурсію.

Li Haoyi написав:

Write a recursive method printMessages that can receive an array of Msg class instances,
each with an optional parent ID, and use it to print out a threaded fashion. That means that child
messages are print out indented underneath their parents, and the nesting can be arbitrarily deep.

Вводимо таке:

printMessages(Array(
  new Msg(0, None, "Hello"),
  new Msg(1, Some(0), "World"),
  new Msg(2, None, "I am Cow"),
  new Msg(3, Some(2), "Hear me moo"),
  new Msg(4, Some(2), "Here I stand"),
  new Msg(5, Some(2), "I am Cow"),
  new Msg(6, Some(5), "Here me moo, moo")
))

На виході має бути таке:

#0 Hello
    #1 World
#2 I am Cow
    #3 Hear me moo
    #4 Here I stand
    #5 I am Cow
        #6 Here me moo, moo
моє рішення
object PrintMessages {
  class Msg(val id: Int, val parent: Option[Int], val txt: String)

  final val TAB = "    "
  def printMessages(messages: Array[Msg]): Unit = {
    for (message <- messages) println(
      s"${TAB * getIndentation(message.parent)}#${message.id} ${message.txt}"
    )

    def getIndentation(currentParent: Option[Int], tabCount: Int = 0): Int = {
      if (currentParent.isEmpty) tabCount
      else getIndentation(messages(currentParent.get).parent, tabCount + 1)
    }
  }

  def main(args: Array[String]): Unit = {
    printMessages(Array(
      new Msg(0, None, "Hello"),
      new Msg(1, Some(0), "World"),
      new Msg(2, None, "I am Cow"),
      new Msg(3, Some(2), "Hear me moo"),
      new Msg(4, Some(2), "Here I stand"),
      new Msg(5, Some(2), "I am Cow"),
      new Msg(6, Some(5), "Here me moo, moo")
    ))
  }
}