Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы ИТ.docx
Скачиваний:
5
Добавлен:
01.04.2022
Размер:
759.42 Кб
Скачать

1) Расширение App

Для превращения объекта в исполняемую программу можно использовать трейт App.

object Hello extends App {

println("Hello, world")

}

Код в теле объекта выполняется автоматически, как если бы он находился внутри метода main.

2)Создание главного метода (main) внутри объекта

object Hello2 {

def main(args: Array[String]) {

println("Hello, world")

}

}

33. Поддерживает ли Scala перегрузку операторов?

в Scala нет перегрузки операторов, так как нет операторов (как сущностей отличных от методов). Есть методы с символическими (операторными) именами вида '+', '/', '::', '<~' и префиксная/инфиксная/посфиксная форма записи. (https://habr.com/ru/company/golovachcourses/blog/255631/)

34. В чем разница между «If..Else» в Java и «If..Else» в Scala?

if-else в Scala позволяет выбирать между двумя альтернативами. Синтаксис похож на if-else в Java. Но тогда как if-else в Java можно использовать только для альтернативных утверждений, Scala позволяет использовать тот же синтаксис для выбора между двумя выражениями. Поэтому в Scala if-else служит также для замены тернарного оператора Java (… ? … : ….)

35. В чем разница между функцией и методом в Scala?

Конкретные различия сводятся к следующему

1. Методы не могут существовать как отдельные выражения (кроме методов с пустыми параметрами), в то время как функции могут.

2. Функция должна иметь список параметров, а метод не может иметь список параметров

3. Имя метода является вызовом метода, а имя функции представляет только сам объект функции

4. Параметр передачи по сути является методом

Функция – это блок кода, который выполняет определённую задачу. Обычно, бизнес проблема разбивается на отдельные задачи, для решения которых, создаются функции.

Метод, в Scala, это часть класса, а функция – это отдельный объект, который может быть присвоен какой-то переменной. Т.е. метод – это функция, которая объявлена элементом класса.

36. Сколько классов можно определить в исходном файле Scala? Java?

В файле scala можно объявить любое количество как обычных классов, так и вложенных , а в java можно объявить только один главный класс и множество вложенных

37. Укажите некоторые ключевые слова, которые используются Java и не требуются в Scala? Почему Scala не требует их?

Ну, например слово return в java. Оно используется для возвращения значения из метода. А в scala, не требуется писать return,чтобы вернуть нужное значение, потому что последнее выражение в теле автоматически становится возвращаемым значением метода.

Также в java есть слово void. Его не используют в scala, потому что в scala все является выражением , что означает, что все возвращает значение. Это одна из причин, почему Scala имеется тип Unit вместо типа void - потому что даже вещи, которые были бы void в Java, должны возвращать значение в Scala.

38. Что такое побочный эффект?

По сути, побочный эффект — любое действие, которое наблюдается за пределами функции или выражения помимо возврата значения, например:

  • операция ввода-вывода,

  • модификация переменной (доступной за пределами области видимости),

  • изменение состояния объекта (наблюдаемое вне области видимости),

  • возбуждение исключения (которое также не обрабатывается внутри области видимости).

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

Почему побочные эффекты так важны? Потому что с ними порядок исполнения имеет значение. Например, два «чистых» выражения, (связанных с соответствующими значениями):

val x = 1 + 2

val y = 2 + 3

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

val x = { print("foo"); 1 + 2 }

val y = { print("bar"); 2 + 3 }

А это уже другая история — мы не можем изменить порядок выполнения, потому что в нашем терминале будет напечатано "barfoo" вместо "foobar" (и это явно не то, чего хотелось).

39. Что такое выражения сопоставления? (Pattern matching)

Сопоставление с примером (Pattern matching) - это механизм сравнения значений с определенным примером. При успешном совпадении значение может быть разложено на составные части.

Сопоставление с шаблоном включает последовательность альтернатив, каждая из которых начинается с ключевого слова case . Каждая альтернатива включает в себя шаблон и одно или несколько выражений , которые будут оцениваться, если шаблон соответствует. Символ стрелки => отделяет шаблон от выражений.