Scala for Backend Engineering & Functional Programming · Lekcja

Wyrażenia zamiast instrukcji

Wszystko jest wyrażeniem

Lekcja 3 z 413 kroki

Wyrażenia zamiast instrukcji to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Wyrażenia a instrukcje

Instrukcja wykonuje działanie, ale nie zwraca użytecznego wyniku. Wyrażenie oblicza się do wartości.

W Scali niemal wszystko jest wyrażeniem. To podstawowa idea, która wpływa na sposób pisania kodu.

if jest wyrażeniem

W wielu językach if jest instrukcją. W Scali if/else zwraca wartość, więc można bezpośrednio przypisać ją do elementu val.

Nie ma potrzeby tworzenia osobnej zmiennej przypisywanej w każdej gałęzi.

object Main {
  def main(args: Array[String]): Unit = {
    val temp = 30
    val label = if (temp > 25) "hot" else "mild"
    println(label)
  }
}

Bloki są wyrażeniami

Blok { ... } również jest wyrażeniem. Jego wartością jest wartość jego ostatniego wiersza.

Można więc obliczyć wartości pośrednie, a następnie zakończyć blok wynikiem.

object Main {
  def main(args: Array[String]): Unit = {
    val result = {
      val a = 2
      val b = 3
      a * b
    }
    println(result)
  }
}

match jest wyrażeniem

Dopasowanie wzorców za pomocą match również zwraca wartość. Każda gałąź generuje wynik, a całe wyrażenie zwraca wartość dopasowanej gałęzi.

object Main {
  def main(args: Array[String]): Unit = {
    val day = 3
    val name = day match {
      case 1 => "Mon"
      case 2 => "Tue"
      case 3 => "Wed"
      case _ => "Other"
    }
    println(name)
  }
}

Typ Unit

Niektóre wyrażenia istnieją wyłącznie ze względu na efekt uboczny, na przykład println. Zwracają one Unit, zapisywany jako ().

Unit przypomina void z innych języków, ale nadal jest rzeczywistą wartością.

object Main {
  def main(args: Array[String]): Unit = {
    val nothing: Unit = println("side effect")
    println(nothing)
  }
}

Zwracanie wartości z funkcji

Ponieważ ciało funkcji jest wyrażeniem, ostatnie wyrażenie stanowi jej wartość zwracaną. Słowo kluczowe return jest rzadko potrzebne.

W tym przypadku ciało funkcji jest pojedynczym wyrażeniem.

object Main {
  def max(a: Int, b: Int): Int = if (a > b) a else b
  def main(args: Array[String]): Unit = {
    println(max(7, 4))
  }
}

Funkcje oparte na wyrażeniach

Funkcja może być wyrażeniem blokowym, którego ostatni wiersz jest wynikiem. Pozwala to zachować zwięzłość logiki i uniknąć zmiennych tymczasowych.

object Main {
  def discount(price: Double): Double = {
    val rate = if (price > 100) 0.2 else 0.1
    price * (1 - rate)
  }
  def main(args: Array[String]): Unit = {
    println(discount(150.0))
  }
}

Zmienność nie jest potrzebna

Ponieważ if i match są wyrażeniami, ich wynik można przypisać do elementu val zamiast modyfikować element var.

Prowadzi to do czystszego, bardziej funkcyjnego kodu.

object Main {
  def main(args: Array[String]): Unit = {
    val score = 85
    val grade = if (score >= 90) "A"
      else if (score >= 80) "B"
      else "C"
    println(grade)
  }
}

Komponowanie wyrażeń

Ponieważ wszystko zwraca wartość, wyrażenia można swobodnie zagnieżdżać i komponować. Wynik jednego staje się danymi wejściowymi kolejnego.

Ta możliwość komponowania jest jednym z głównych powodów, dla których Scala jest tak ekspresyjna.

object Main {
  def main(args: Array[String]): Unit = {
    val n = 7
    val message = "n is " + (if (n % 2 == 0) "even" else "odd")
    println(message)
  }
}

Dlaczego ma to znaczenie

Kod oparty na wyrażeniach:

  • ogranicza potrzebę używania zmiennych
  • wyraźnie pokazuje przepływ wartości
  • naturalnie składa się w większe programy
  • doskonale współgra z niezmiennością

Wszystko razem

W tym przykładzie wyrażenie blokowe zawiera wyrażenie if, a całość jest przypisana do jednego niezmiennego wyniku.

object Main {
  def main(args: Array[String]): Unit = {
    val total = {
      val items = 3
      val each = 12
      val raw = items * each
      if (raw > 30) raw - 5 else raw
    }
    println(total)
  }
}

Szybkie sprawdzenie

Proszę sprawdzić swoją znajomość wyrażeń.

Podsumowanie

Dowiedzieli się Państwo, że w Scali niemal wszystko jest wyrażeniem:

  • if/else, match i bloki zwracają wartości
  • Wartością bloku jest jego ostatnie wyrażenie
  • Wyrażenia powodujące efekty uboczne zwracają Unit (())
  • Ostatnie wyrażenie funkcji jest jej wartością zwracaną
  • Ogranicza to zmienność i poprawia możliwość komponowania
Bezpłatny start

Ucz się Scala dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
39
Lekcje
143

Często zadawane pytania

Czy lekcja „Wyrażenia zamiast instrukcji” jest bezpłatna?

Tak — pełny tekst „Wyrażenia zamiast instrukcji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyrażenia zamiast instrukcji”?

Wszystko jest wyrażeniem Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?

Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wyrażenia zamiast instrukcji”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?

Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Korzystanie z REPL
  2. val, var i typy
  3. Wyrażenia zamiast instrukcji
  4. Interpolacja napisów
← Powrót do Scala for Backend Engineering & Functional Programming