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

Типы литералов

  1. целочисленные

  2. с плавающей точкой

  3. булевы. Логические литералы допускают только два значения: истина и ложь , которые являются членами типа Boolean.

  4. строковые

  5. многострочные. Многострочные строковые литералы также являются сериями символов, но имеют несколько строк (в тройных ковычках)

  6. символьные. символьные литералы являются символами Uni-кода

23. Чем отличается List и Array?

Массив является изменяемым, что означает, что вы можете изменять значения каждого индекса, в то время как Список (по умолчанию) неизменяем, что означает, что каждый раз, когда вы вносите изменения, создается новый список.

Для характеристик производительности массив быстрее с произвольным доступом к элементам, в то время как Список быстрее при добавлении (добавлении) новых элементов.

24. Является ли язык Scala статически типизированным?

Язык обладает статической типизацией, если тип переменной известен во время компиляции, а не выполнения. Типичными примерами таких языков являются Ada, C, C++, C#, JADE, Java, Fortran, Haskell, ML, Pascal, и Scala.

Большим преимуществом статической проверки типов является тот факт, что большую часть ошибок типов можно отловить на ранней стадии разработки. Статическая типизация обычно приводит к более быстрому исполнению скомпилированного кода, потому что компилятор знает точные типы используемых данных и создает оптимизированный машинный код. Статическая проверка типов оценивает лишь информацию, доступную во время компиляции, а также может подтвердить, что проверенные условия соблюдаются для всех возможных вариантов исполнения программы, что избавляет от необходимости проверки перед каждым запуском программы. Без статической проверки типов даже 100%-ное покрытие тестами не всегда поможет выявить некоторые ошибки типизации.

25. Что такое статически типизированный язык и что такое динамически типизированный язык?

Статически типизированные языки

Статические языки проверяют типы в программе во время компиляции, еще до запуска программы. Любая программа, в которой типы нарушают правила языка, считается некорректной.

Каждое выражение в статически типизированном языке относится к определенному типу, который можно определить без запуска кода.

Одни статически типизированные языки требуют обозначать тип. Другие могут определить тип автоматически.

Не нужно запускать программу чтобы понять, что существует проблема.

Динамически типизированные языки

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

Говорят, что значения в динамических языках обладают типом, но переменные и функции — нет.

Сравнение

Большинство динамических языков выдадут ошибку, если типы используются некорректно. При использовании динамически типизированных языков даже простая ошибка вида "a" + 1 может возникнуть в боевом окружении. Статические языки предотвращают такие ошибки, но, конечно, степень предотвращения зависит от мощности системы типов.

Статические и динамические языки построены на фундаментально разных идеях о корректности программ. В динамическом языке "a" + 1 это корректная программа: код будет запущен и появится ошибка в среде исполнения. Однако, в большинстве статически типизированных языков выражение "a" + 1 — это не программа: она не будет скомпилирована и не будет запущена. Это некорректный код, так же, как набор случайных символов !&%^@*&%^@* — это некорректный код.

26. В чем разница между статически типизированными и динамически типизированными языками?

1. Большинство динамических языков выдадут ошибку, если типы используются некорректно.При использовании динамически типизированных языков даже простая ошибка вида "a" + 1. Статические языки предотвращают такие ошибки.

2. Статическая проверка: Все типы переменных должны быть явно указаны, так как эта информация требуется во время компиляции.

Например в Java: float f = 0.5;

Динамическая проверка: явное объявление не требуется, так как тип присваивается переменной во время выполнения.

Например в Python: f = 0.5

3. Статическая проверка: дополнительная обработка во время компиляции, но более высокая производительность во время выполнения.

Динамическая проверка: более эффективные компиляторы/интерпретаторы, но проверка типов во время выполнения влияет на производительность.

4. Статически типизированные языки ограничивают типы переменных: язык программирования может знать, например, что x — это Integer. В этом случае программисту запрещается делать x = true, это будет некорректный код.

Динамически типизированные языки помечают значения типами: язык знает, что 1 это integer, 2 это integer, но он не может знать, что переменная x всегда содержит integer. В этом случае мы можем делать х = true.

27. Является ли Scala чистым языком ООП? Является ли Java чистым языком ООП?

Scala является чистым объектно-ориентированным языком в том смысле, что все является объектом, включая числа или функции. В этом отношении он отличается от Java, поскольку Java различает примитивные типы (такие как boolean и int) и ссылочные типы.

28. Как и класс Java java.lang.Object, что является суперклассом всех классов в Scala?

Класс Any является корнем иерархии классов Scala. Каждый класс в среде выполнения Scala прямо или косвенно наследуется от этого класса.

Scala Standard Library 2.13.5 - scala.Any (scala-lang.org)

29. Что такое модификатор доступа по умолчанию в Scala? Есть ли у Scala ключевое слово public?

Модификатор доступа - ключевые слова, которые регулируют уровень доступа к разным частям кода. В Scala все поля классов по умолчанию имеют модификатор public.Объекты с данным модификатором доступа могут быть доступны из любой части программы.

Ссылка №1

Ссылка №2

30. Что такое REPL в Scala? Какая польза от Scala REPL? Как получить доступ к Scala REPL из командной

строки?

Scala REPL - это инструмент ( scala ) для оценки выражений в Scala.

Команда scala выполнит исходный сценарий, заключив его в шаблон, а затем скомпилировав и выполнив полученную программу.

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

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

К полезным функциям REPL относятся:

  • IMain REPL обязан $intp.

  • последнее исключение REPL связано с lastException.

  • используйте вкладку для завершения.

  • используйте, //print<tab>чтобы показать типизированные обессахаривания.

  • используйте :help для списка команд.

  • используйте :load для загрузки файла ввода REPL.

  • используйте :paste для ввода класса и объекта в качестве сопутствующих.

  • используйте, :paste -raw чтобы отключить перенос кода, чтобы определить пакет.

  • использовать :javap для проверки артефактов класса.

  • использовать -Yrepl-outdir для проверки артефактов класса с помощью внешних инструментов.

  • используйте :power для входа в режим мощности и импорта компонентов компилятора.

  • использовать :settings для изменения настроек компилятора; некоторые настройки требуют :replay.

  • используйте :replay для воспроизведения сеанса с измененными настройками.

Примечания по реализации:

  1. пользовательский код может быть заключен либо в объект (чтобы код запускался во время инициализации класса), либо в класс (чтобы код выполнялся во время создания экземпляра). Переключатель есть -Yrepl-class-based.

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

  3. зависимости от предыдущих строк включаются автоматически сгенерированным импортом.

  4. неявным импортом scala.Predefможно управлять путем ввода явного импорта.

31. Как мы реализуем циклы функционально? В чем разница между циклами в стиле ООП и ФП?

Функционально циклы мы реализуем при помощи рекурсии.

В ООП вычисление описывается в виде инструкций, изменяющих состояние вычислителя, поэтому цикл в ООП выполняет группы инструкций при помощи инструкции while или for

А в функциональном программировании модель вычислений не использует понятие изменяемого состояния, поэтому в ФП нет циклов, поскольку нет различий между итерациями

32. Что такое «Application» в Scala или «Scala Application»? Что такое «App» в Scala? Какая польза от App?

Есть два способа создать точку запуска для вашего приложения:

  • Определить объект, расширяющий трейт App;

  • Определить объект с правильно определенным главным методом.