1. package ga aru no ni, naze import ga hitsuyo na no ka
Purojekuto ga chiisai uchi wa, import wa “nanka mendokusai tetsuzuki” mitai ni mieru kamo shiremasen. Demo futatsu me no package to, futatsu mikka no utility o tsuika shita shunkan, konna jumon o kaku koto ni narimasu: app.util.normalizeCommand(...). Ichido ya nido nara mondai nain desu ga… kore o onaji fairu de 20 kai yattara, kodo ga yuubinkyoku no juusho-roku mitai ni narimasu.
import no imi wa totemo tanjun desu: mijikai namae o kanzen na namae (fully qualified name) no kawari ni tsukaeru you ni shimasu. Kanzen na namae to wa “juusho + namae” o dot de tsunageta mono desu. Tatoeba app.util.normalizeCommand. Fairu ni import app.util.normalizeCommand ga areba, saki wa tada normalizeCommand(...) to kakemasu.
Mini reiji de hikaku shite mimashou.
Tatoeba, app.util package ni konna kansuu ga aru to shimasu:
package app.util
fun normalizeCommand(raw: String): String {
return raw.trim().lowercase()
}
Import ga nai baai, betsu no package kara wa konna fuu ni yobanai to ikemasen:
package app
fun main() {
val cmd = app.util.normalizeCommand(" HeLP ")
println(cmd) // help
}
Import o tsukeru to, yomiyasuku narimasu:
package app
import app.util.normalizeCommand
fun main() {
val cmd = normalizeCommand(" HeLP ")
println(cmd) // help
}
Hito no kanjou to shite wa: import wa “kono fairu de kono namae o yoku tsukau kara, yokei na prefix nashi de ikou” to iu sengen desu.
Kanzen na namae o import no kawari ni tsukau: sonohou ga yoi toki
Tokidoki, import o tsuika shitakunai baai ga arimasu. Tatoeba, aru kansuu o tada ichido dake tsukau toki. Arui wa, kyouzai no reiji de “doko kara kita namae ka” o akiraka ni shitai toki. Sonna toki wa, kanzen na namae wa futsuu ni tsukaeru shudan desu.
Tatoeba, heihoukon ga hitsuyo ni natta baai:
package app
fun main() {
val x = kotlin.math.sqrt(9.0)
println(x) // 3.0
}
Kore wa zenzen ari na style desu. Mushi-ro, tokidoki wa import yori yaku ni tatsu koto mo arimasu: “kotlin.math no naka no sqrt” da to wakaru kara desu. sqrt dake ga pop tto dete kite “doko kara?” to naranai wake desu.
Jissen rule: namae no shiyou ga sukunai nara kanzen na namae de ii. Yoku tsukau nara import ga me to kiboudo o sukuimasu.
2. import wa doko ni aru ka, naze “fairu o tsunagu” wake dewa nai no ka
Yoku aru (shikamo wakaruyasui) gomankai: “import shita nara fairu o tsunaida”. Kotlin de import sareru no wa fairu dewa naku, “folder” demo naku, tokutei no namae (kansuu, class, object, property) de, sore ga betsu no package ni aru to iu dake desu.
Sore yori mo taisetsu na koto: import wa fairu goto ni rokaru desu. Kaita .kt no naka dake de yuko desu. Tonari no fairu de wa mata ichikara: jibun no package, jibun no import.
Kotlin de no fairu no narabi wa, daitai konna kanji desu:
- package ... (package o tsukau baai)
- import ...
- sengen: kansuu, class nado
Zumen-teki ni wa konna fuu ni narimasu:
┌──────────────────────────────┐
│ package app │
├──────────────────────────────┤
│ import app.util.normalize... │
│ import kotlin.math.sqrt │
├──────────────────────────────┤
│ fun main() { ... } │
│ fun helper() { ... } │
└──────────────────────────────┘
fun main() no ato no fairu no mannaka ni import o kakou to suru to, compiler ga okorimasu. Kotlin wa, kyouin ga kakushi-peepar o mitsuketa toki mitai ni kibishii: “import wa ue ni”.
Fairu no “izon” to shite no import
Yaku ni tatsu shukan: import no ichiran o “kono fairu ga ikiru tame ni nani ga hitsuyo ka” toshite miru koto desu.
Tatoeba:
package app
import app.util.normalizeCommand
import app.format.formatAmount as prettyAmount
import kotlin.math.round as mathRound
Kore wa, koubou no tool bar mitai na mono desu: “koko ni hammer, screwdriver, tape ga aru”. Import ga takusan de, shikamo randam ni naru toki, sono fairu wa yoku “yarisugiteiru” koto ga ooi desu. Gyakuni import ga hotondo nai no ni, naka ga a.b.c.d.e.f(...) mitai na chou-nagai kousei darake nara, tabun hitsuyo na import ga tarinai (arui wa, kodo o kansuu/package ni wakete seiri subeki) to iu sign desu.
IDE wa taitei tasukete kuremasu: import o jidou de tsuika shi, fuyou na mono o keshi, ichiran o seiri shite kuremasu.
3. Kyouzai apuri de no import: command no normalize o kiritasu
Kyou kara wa, chiisana console apuri BudgetBuddy o tsukutte iru to iu tei de susumemashou. Kore wa collection wa mada tsukaimasen (ato de), class mo tsukaimasen (motto ato de), demo command o yonde normalize shi, kantan na scenario o jikkou dekimasu.
main wa app ni, utility wa app.util ni oku you ni shimasu.
Fairu src/app/util/Command.kt:
package app.util
fun normalizeCommand(raw: String): String {
return raw.trim().lowercase()
}
Tsugi ni, fairu src/app/Main.kt:
package app
import app.util.normalizeCommand
fun main() {
print("Command o nyuuryoku shite kudasai: ")
val cmd = normalizeCommand(readln())
println("Normalize-go no command: $cmd")
}
“Kyakusoku” ni chúmoku shite kudasai: normalizeCommand wa String o uke-tori, String o kaeshimasu. Jibun de readln() o yomiません. Kore wa benri desu: kansuu ga pure ni nari, yosoku kanou ni nari, main ga I/O o kanri dekimasu.
4. import ...*: benri dakedo, kodo ga suiri-mono ni naru
Import no hoshi (*) wa “kono package kara tsukaeru namae o subete import shite” to iu imi desu. Cheat code mitai ni mieru kamo shiremasen:
import kotlin.math.*
Suru to, sqrt, round, ceil, floor o individual ni import shinakute mo kakemasu.
Mondai wa, hoshi ga kodo o wakarinikuku suru koto desu: fairu o hiraitara round(...) ga aru. De mo round wa watashitachi no round? kotlin.math.round? Soretomo betsu no nanika? Purojekuto ga ookiku naru hodo, kono shitsumon ni “atama” dewa naku “kensaku” de kotaeru you ni narimasu.
Dakara kyouzai ya, taitei no team code style de wa point import ga konomi raremasu:
import kotlin.math.sqrt
import kotlin.math.round
Hoshi tsuki import ga seito-ka sareru koto mo arimasu ga, taitei wa “jibun ga kontekisuto o kanzen ni wakatte iru” toki dake desu. Tatoeba, fairu zen-tai ga math ni tokka shite ite, kotlin.math no kansuu o jissai ni 10 ko ijou tsukau baai. Ippan-teki na apuri rojikku de wa, hoshi ga “naze sono namae de, doko kara kita?” o yobi-okoshi yasuku narimasu.
5. Namae no konflikuto to alias
Namae no konflikuto to wa, onaji fairu no naka de onaji short name ni taishite 2 tsu no kouho ga dekite shimau koto desu.
Mottomo arigachi na scenario: jibun de round o kaita ato de kotlin.math.round mo tsukaitaku natta. Arui wa format o kaita ato de, purojekuto no doko ka ni mo betsu no format ga atta. Kotlin wa “docchi no tsumori?” o katte ni atete kureません. Atate wa bug no moto de, “kinou made ugokita” kei no bug o tsukurimasu.
Wazato konflikuto o tsukurimashou.
Fairu src/app/util/Round.kt:
package app.util
fun round(x: Double): Int {
return x.toInt()
}
Soshite Main.kt de, jibun no mo math no mo tsukaitai:
package app
import app.util.round
import kotlin.math.round
fun main() {
println(round(3.6))
}
Kono kodo wa compile dekinai: onaji namae round no import ga 2 tsu aru to, aimai ni narimasu.
Kotlin ni wa 3 tsu no massugu na senryaku ga arimasu: kanzen na namae o tsukau, import list o kaeru, arui wa alias (pseudonym tsuki import) o tsukau. Tsugi ni shimesu no ga, mottomo yomi yasuku “otona” na sentaku: alias desu.
Alias import: as de rokaru na namae o tsukuru
Alias import wa konna fuu ni kakimasu:
import kotlin.math.round as mathRound
Tsumari: “kono fairu de wa kotlin.math.round o mathRound to yobu” to iu koto desu. Daiji na point: library no kansuu o kaimei shita wake dewa naku, purojekuto o henkou shita wake demo arimasen. Tada kono fairu no naka dake de tsukau rokaru na nick name o tsukutta dake desu.
Main.kt o, ugoku shi wakariyasui you ni kakinaoshimashou:
package app
import app.util.round
import kotlin.math.round as mathRound
fun main() {
val x = 3.6
val a = round(x) // watashitachi no version: Int, tada no kiri-sute
val b = mathRound(x) // kotlin.math no version: Double, tadashii shisya-gonyuu
println("a = $a") // a = 3
println("b = $b") // b = 4.0
}
Koko de wa, shoshinsha demo yomi yasui: mathRound ga “math no round” da to wakari, round wa “jibun-tachi no nanika” da to wakarimasu.
formatAmount ga 2 tsu aru toki no alias: jissai no apuri ni chikai reiji
round no reiji wa wakariyasui desu ga, chotto tsukurareta kan ga arimasu. Jissen de wa format, parse, normalize, printReport mitai na futsuu no tango ga yoku konflikuto shimasu. Tsumari, betsu no basho de douzen tsukaitai namae desu.
Okane no kingaku formatter o 2 tsu tsukurimashou: hitotsu wa “raw” (tada no suuji), mou hitotsu wa “pretty” (tsuuka tsuki). Soshite wazato onaji namae formatAmount o tsukete, alias ga dounaru ka o mimashou.
Fairu src/app/util/AmountFormat.kt:
package app.util
fun formatAmount(amount: Int): String {
return amount.toString()
}
Fairu src/app/format/AmountFormat.kt:
package app.format
fun formatAmount(amount: Int): String {
return "$amount USD"
}
Ima, Main.kt de ryohou hoshii: debug you ni raw, user ni wa pretty.
package app
import app.format.formatAmount as prettyAmount
import app.util.formatAmount as rawAmount
fun main() {
val income = 1200
println("DEBUG: income=${rawAmount(income)}") // DEBUG: income=1200
println("User you: ${prettyAmount(income)}") // User you: 1200 USD
}
2 ten chúmoku shite kudasai.
1 tsu me: alias import wa “konflikuto o kaihi suru” dake de naku, imi o tsuika suru koto mo dekimasu. prettyAmount wa “kirei na format”, rawAmount wa “debug you no raw” to yomeます.
2 tsu me: alias wa Main.kt no naka dake de yuko desu. Betsu no fairu de wa betsu no alias o erande mo ii shi, konflikuto ga nakereba alias o tsukawanakute mo kamaiません.
6. BudgetBuddy no mini refactoring: main o motto usuku suru
Koko kara wa, chotto “jissen-poi” na kakera o kumitate masuu (mada collection mo OOP mo nai kedo, apuri rashiku mieru yatsu).
Idea: main ga command o yomi, normalize shi, kotae o print suru. Input/normalize no utility wa app.util. Formatting wa app.format.
Fairu src/app/util/Input.kt:
package app.util
fun readTrimmedLine(prompt: String): String {
print(prompt)
return readln().trim()
}
Fairu src/app/util/Command.kt:
package app.util
fun normalizeCommand(raw: String): String {
return raw.trim().lowercase()
}
Fairu src/app/format/Amount.kt:
package app.format
fun formatAmount(amount: Int): String {
return "$amount USD"
}
Fairu src/app/Main.kt:
package app
import app.format.formatAmount
import app.util.normalizeCommand
import app.util.readTrimmedLine
fun main() {
val raw = readTrimmedLine("Command o nyuuryoku shite kudasai (income/exit): ")
val cmd = normalizeCommand(raw)
if (cmd == "income") {
println("Anata no shuunyuu: ${formatAmount(1200)}") // Anata no shuunyuu: 1200 USD
} else if (cmd == "exit") {
println("Ja ne!") // Ja ne!
} else {
println("Fumei na command: $raw") // reiji: Fumei na command: qwe
}
}
Taisetsu na point: Main.kt ga mijikaku nari, wakariyasuku narimashita. Dousa no shousai (donna fuu ni trim suru ka, donna fuu ni kingaku o format suru ka) o shiranakute ii. Tada import de “namae o torikomi”, blocks toshite tsukau dake desu.
7. import to alias de yoku aru misu
Misu 1: import ga purojekuto zentai ni eikyou suru to omou.
Import wa tokutei no fairu no settei desu. Main.kt ni import app.util.normalizeCommand o tsuika shita kara to itte, Report.kt ni mo “katte ni” tsuika sareru wake dewa arimasen. Kakufairu wa jibun no import set o motsu — sore de ii no desu: fairu wa dokuritsu shite, nani ga hitsuyo ka o seijiki ni sengen suru beki desu.
Misu 2: import ...* o “default style” ni shite shimau.
Hoshi wa kyou wa 2-3 gyou seiyaku shite kuremasu ga, ashita wa konran no moto ni narimasu: namae ga doko kara kita no ka, naze sono namae na no ka ga wakaranaku naru kara desu. Tokuni namae konflikuto no toki, itsu no ma ni ka format ga “doko ka ni mo” aru koto ni kidzuku koto ni narimasu. Saisho wa point import kara hajime, * wa ishiki shite, hituyou na toki dake tsukau no ga yoi desu.
Misu 3: alias import de “purojekuto no kansuu o kaimei” shiyou to suru.
import ... as ... de kaeru no wa “kono fairu no naka no namae” dake desu. Kore wa refactoring demo, sengen no rename demo arimasen. kotlin.math.round o as mathRound to import shite mo, atarashii kansuu o tsukutta wake demo, library o kaeta wake demo naku, tada aimai-sa o nakusu tame no rokaru nickname desu.
Misu 4: konflikuto o “nanka tekitou na rename” de naosu (imi dewa naku).
Konflikuto ga deru to, shoshinsha wa round1 to round2 mitai na alias ni shi-gachi desu. Compile wa tooru kedo, yomuyasuku wa arimasen. Alias wa yakuwari o setsumei suru you ni erabu to yoi desu: mathRound, prettyAmount, rawAmount, cliNormalize. Kore wa komakai koto dewa naku, 1 shuukan go no jibun ga jibun o kirai ni naranai tame no touhi desu.
Misu 5: gomi (tsukawarete inai) import o nokosu.
Jikken no ato, mou tsukawanai import ga nokoru koto ga arimasu. Puroguramu wa kowarenai kedo, fairu ga yogore, jissai no izon ga mie-nikuku narimasu. Yoi shukan wa, toki-doki tsukawarete inai import o sakujo suru koto desu (IDE ga jidou de yatte kureta ri shimasu), tokuni refactoring de kansuu o package-kan de idou suru you na baai ni wa taisetsu desu.
GO TO FULL VERSION