Статьи

Scala: основы ООП

Большую часть времени, когда я пишу код, я использую Java. Так что это мой основной язык программирования. Это удовлетворяет меня во всех аспектах, но я замечаю, что Java иногда слишком многословна. Вот почему я перешел на Scala. Поэтому все свободное время я трачу сейчас на изучение Scala. Я собираюсь опубликовать некоторые заметки в своем блоге, поэтому вы можете посетить новую страницу моего блога, которая будет посвящена Scala. Первая серьезная статья будет о Scala OOP. Скала-логотип

Объявление класса

ООП в Scala позволяет создавать классы. Но процесс объявления отличается от Java. Вот как мы можем сделать это в Scala:

1
class Person

Ничего сложного. И это не странно, мы просто объявили совершенно бесполезным занятие. Давайте продолжим, чтобы посмотреть, как мы можем обновить код, чтобы сделать его более практичным.

Первичный конструктор

Я собираюсь добавить некоторые параметры в класс Person, которые необходимо указать при создании объекта. Как многие из вас могут догадаться, я говорю о первичном конструкторе :

1
class Person(name: String, age: Int)

Первичный конструктор может быть вызван напрямую, когда мы создаем объект. Вот пример:

1
val p1 = new Person("Alex", 24)

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

Параметры с префиксом конструктора

Хорошо, мы уже объявили класс Person и, похоже, он может быть более или менее полезным, поскольку в нем есть некоторые параметры инициализации, переданные в первичном конструкторе. Но как мы можем взаимодействовать с этими параметрами после инициализации?

1
2
3
scala> p1.name
<console>:10: error: value name is not a member of Person
              p1.name

Как видите, попытка доступа к параметру name класса экземпляра Person приводит к ошибке. Это связано с тем, что параметр name не имеет префикса в объявлении основного конструктора . Следовательно, параметры name и age объявлены как private и недоступны вне класса Person .

1
class Person(val name: String, var age: Int)

Я изменил объявление класса Person. Теперь параметр name будет поставляться с геттером, потому что он имеет префикс val , а параметр age будет поставляться с сеттером в дополнение к сеттеру, потому что он имеет префикс var .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
scala> val p2 = new Person("Bobby", 25)
p2: Person = Person@30374534
 
scala> p2.name
res1: String = Bobby
 
scala> p2.name = "Bob"
<console>:9: error: reassignment to val
       p2.name = "Bob"
 
scala> p2.age
res2: Int = 25
 
scala> p2.age = 26
p2.age: Int = 26

С помощью префиксов val и var внутри основного конструктора вы можете сделать классы более практичными.

Тело класса

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

1
2
3
4
class Person(val name:String, var age:Int) {
def introduce() =
println(s"Hi, my name is ${name}, I'm ${age} years old")
}

Теперь экземпляр класса Person стал более социальным, и он (она) может представиться кому-то. Попробуйте код:

1
2
val p3 = new Person("Jhon", 33)
p3.introduce

Резюме

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

Ссылка: Scala: основы ООП от нашего партнера по JCG Алексея Зволинского в блоге Фрузенштейна .