Konstruktor główny i parametry właściwości
Deklaruj klasy z konstruktorami głównymi i właściwościami deklarowanymi bezpośrednio w konstruktorze.
Konstruktor główny i parametry właściwości to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 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 Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Konstruktor podstawowy
Klasa Kotlina deklaruje konstruktor podstawowy w nawiasach, bezpośrednio za nazwą klasy. Nie ma on treści metody — zawiera jedynie listę parametrów.
Najprostsza klasa
Konstruktor podstawowy bez modyfikatorów jest pomijany po nazwie klasy.
class Greeter(val name: String) {
fun greet() = "Hello, $name!"
}
fun main() {
println(Greeter("Ada").greet())
}Parametry będące właściwościami
Dodaj val lub var przed parametrem konstruktora, aby w jednym kroku przekształcić go we właściwość klasy.
class Person(val name: String, var age: Int)
fun main() {
val p = Person("Bob", 30)
println("${p.name} is ${p.age}")
p.age = 31
println("Now ${p.age}")
}Parametry bez val/var
Parametry konstruktora bez val/var są lokalne dla konstruktora — można ich używać w blokach init lub inicjalizatorach właściwości, ale nie można uzyskać do nich dostępu później.
class Logger(prefix: String) {
val msg = "$prefix: ready"
}
fun main() {
val l = Logger("[INFO]")
println(l.msg)
// l.prefix // ERROR — not a property
}Domyślne wartości parametrów
Podaj wartości domyślne parametrów konstruktora, aby uniknąć powielania kodu związanego z przeciążeniami.
class User(
val name: String,
val age: Int = 0,
val email: String = ""
)
fun main() {
println(User("Ana").age) // 0
println(User("Ben", 25).email) // ""
println(User("Cal", 30, "c@x.io").email)
}Argumenty nazwane
Pomiń kolejność pozycyjną i nazwij parametry w miejscu wywołania — jest to szczególnie przydatne w połączeniu z wartościami domyślnymi.
class HttpClient(
val baseUrl: String,
val timeoutMs: Int = 5000,
val retries: Int = 3
)
fun main() {
val c = HttpClient(
baseUrl = "https://api.example.com",
retries = 5
)
println("retries=${c.retries} timeout=${c.timeoutMs}")
}Widoczność konstruktora
Użyj private constructor, aby uniemożliwić tworzenie obiektów z zewnątrz — jest to częste rozwiązanie stosowane wraz z metodami fabrykującymi.
class Singleton private constructor() {
companion object {
val instance = Singleton()
}
}
fun main() {
val s = Singleton.instance
println(s)
}Konstruktory dodatkowe
Dodaj dodatkowe konstruktory za pomocą słowa kluczowego constructor. Muszą one delegować do konstruktora podstawowego za pomocą this(...).
class Point(val x: Int, val y: Int) {
constructor(value: Int) : this(value, value)
}
fun main() {
println("${Point(3).x}, ${Point(3).y}") // 3, 3
}Konstruktor z określoną widocznością
Można ustawić różne poziomy widoczności dla poszczególnych konstruktorów — jest to przydatne w bibliotekach.
class Lib internal constructor(val key: String) {
companion object {
fun create(key: String) = Lib(key)
}
}
fun main() {
println(Lib.create("abc").key)
}Podsumowanie bloku init
Kod, który powinien zostać wykonany podczas tworzenia obiektu, należy umieścić w bloku init { }. Wiele bloków init jest wykonywanych w kolejności występowania w kodzie źródłowym.
class Validator(val value: String) {
init { require(value.isNotBlank()) { "value cannot be blank" } }
}
fun main() {
println(Validator("ok").value)
// Validator("") // throws IllegalArgumentException
}Łączenie właściwości i logiki
Deklaracje właściwości, konstruktory dodatkowe i bloki init tworzą elastyczny potok inicjalizacji.
class Account(
val owner: String,
initialBalance: Double = 0.0
) {
var balance: Double = initialBalance
private set
init {
require(initialBalance >= 0) { "balance must be non-negative" }
}
fun deposit(amount: Double) { balance += amount }
}
fun main() {
val a = Account("Alice", 100.0)
a.deposit(50.0)
println("${a.owner}: ${a.balance}") // Alice: 150.0
}Szybkie sprawdzenie
Co robi słowo kluczowe val, gdy zostanie użyte w parametrze konstruktora podstawowego?
Podsumowanie
Konstruktor podstawowy znajduje się w nagłówku klasy. Używaj val/var dla parametrów będących właściwościami; zwykłe parametry są lokalne dla konstruktora. Dodawaj wartości domyślne, aby ograniczyć liczbę przeciążeń, a logikę konfiguracji umieszczaj w blokach init. Konstruktory dodatkowe delegują wywołanie za pomocą this(...).
Często zadawane pytania
Czy lekcja „Konstruktor główny i parametry właściwości” jest bezpłatna?
Tak — pełny tekst „Konstruktor główny i parametry właściwości” 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 Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Konstruktor główny i parametry właściwości”?
Deklaruj klasy z konstruktorami głównymi i właściwościami deklarowanymi bezpośrednio w konstruktorze. Ćwiczysz Kotlin Academy 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ąć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Academy 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 1 z 4.
Ile czasu zajmuje lekcja „Konstruktor główny i parametry właściwości”?
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 Kotlin Academy?
Tak. Każda lekcja Kotlin Academy 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
- Konstruktor główny i parametry właściwości
- Bloki init i kolejność inicjalizacji
- Własne gettery i settery z field
- lateinit i leniwa inicjalizacja