Clojure: funksjonell programmering og backendutvikling på JVM · leksjon

Definere og bruke navnerom

Lær å organisere kode og unngå navnekonflikter ved hjelp av Clojures navneromssystem.

Leksjon 2 av 411 trinn

Definere og bruke navnerom er en gratis leksjon i Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Clojure: funksjonell programmering og backendutvikling på JVM, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.

Hvorfor navnerom er viktige

Se for deg at du bygger en stor applikasjon med mange filer og funksjoner. Uten organisering kan du ved et uhell bruke samme navn på forskjellige ting, noe som fører til forvirring og feil.

Navnerom i Clojure hjelper deg med å organisere koden i logiske grupper, forhindre slike navnekonflikter og gjøre prosjektene enklere å håndtere.

Deklarere et navnerom

Hver Clojure-kildefil starter med en ns-deklarasjon. Denne makroen definerer navnerommet for koden i filen. Det samsvarer vanligvis med filens sti.

En fil med navnet src/my_app/core.clj vil for eksempel vanligvis deklarere my-app.core som navnerom.

(ns my-app.core)

(defn greet [name]
  (str "Hello, " name ". Welcome to " *ns* "))

(defn -main []
  (println (greet "CoddyKit user")))

Konvensjoner for navngiving av navnerom

Clojure-navnerom følger en hierarkisk struktur, omtrent som Java-pakker eller filstier. De bruker vanligvis kebab-case (bindestreker) i navn.

  • my-project.core: Hovedinngangspunktet eller kjerneverktøy.
  • my-project.utils: Generelle hjelpefunksjoner.
  • my-project.db.sql: Logikk for databaseinteraksjon.

Denne strukturen bidrar til å holde koden modulær og enkel å navigere i.

Laste inn andre navnerom med `require`

For å bruke funksjoner som er definert i et annet navnerom (eller et bibliotek), må du require det. require-deklarasjonen plasseres vanligvis i ns-formen og bruker en vektor med navneromssymboler.

Her laster vi inn clojure.string, et innebygd bibliotek for strengbehandling.

(ns my-app.main
  (:require [clojure.string]))

(defn -main []
  (println (clojure.string/upper-case "hello clojure")))

Gi navnerom alias med `:as`

Det kan være kjedelig å skrive ut fullstendige navneromnavn. Nøkkelordet :as, brukt i :require-vektoren, lar Dem opprette et kortere alias for et navnerom som kreves inn.

Dette gjør koden mer kortfattet og lesbar uten at tydeligheten går tapt.

(ns my-app.main
  (:require [clojure.string :as str]))

(defn -main []
  (println (str/join "-" ["coddy" "kit" "rocks"])))

Selektiv innlasting: `:refer`

Noen ganger trenger De bare noen få funksjoner fra et stort navnerom, eller De vil unngå navnekonflikter. De kan bruke alternativet :refer i :require for eksplisitt å hente bare de angitte symbolene inn i området til det gjeldende navnerommet.

(ns my-app.main
  (:require [clojure.set :refer [union]])) ; Only bring 'union' into scope

(defn -main []
  (let [set1 #{1 2 3}
        set2 #{3 4 5}]
    (println "Union of sets:" (union set1 set2))))

Clojure-kjernen: alltid tilgjengelig

De har kanskje lagt merke til at De ikke trenger å eksplisitt bruke require på funksjoner som +, map, println eller defn.

Det er fordi disse grunnleggende funksjonene er en del av navnerommet clojure.core, som automatisk lastes inn og refereres av hvert nytt navnerom De oppretter. Det er Clojures standardbibliotek.

Makroen `in-ns` (bruk i REPL)

Makroen in-ns endrer det gjeldende navnerommet. Den er først og fremst nyttig når De arbeider interaktivt i REPL (Read-Eval-Print Loop), slik at De kan bytte kontekst uten å endre kildefilen.

Generelt vil De ikke bruke in-ns i kildekoden til applikasjonen.

(ns my-app.temp)

(defn current-ns-name []
  (str *ns*))

(in-ns 'my-app.other-temp)
(defn other-ns-name []
  (str *ns*))

(defn -main []
  (println "Original NS:" (my-app.temp/current-ns-name))
  (println "Switched NS (REPL-like context):" (my-app.other-temp/other-ns-name)))

`use`: en enklere, mer risikabel måte

Gammel Clojure-kode eller eldre veiledninger kan nevne makroen use. Den ligner på require, men henter automatisk alle offentlige funksjoner fra det påkrevde navnerommet inn i det gjeldende navnerommet.

Selv om dette er praktisk, kan det lett føre til navnekonflikter (for eksempel hvis to biblioteker definerer en funksjon som heter count). Derfor frarådes use generelt til fordel for require med :as eller :refer.

Hurtigsjekk: bruk av navnerom

Hvilke av følgende påstander om Clojures navnerom og bruken av dem er SANNE?

Oppsummering: organisering av Clojure-koden

I denne leksjonen har De lært hvor viktige navnerom er for å organisere Clojure-prosjekter og hindre navnekonflikter. Vi har gått gjennom:

  • Definering av et navnerom med makroen ns.
  • Betydningen av hierarkiske navnekonvensjoner.
  • Innlasting av ekstern kode med require.
  • Oppretting av aliaser med :as for ryddigere kode.
  • Selektiv import av symboler med :refer.
  • Hvorfor funksjoner fra clojure.core alltid er tilgjengelige.
  • Rollen til in-ns i REPL, og hvorfor use generelt unngås.

Å beherske navnerom er avgjørende for å bygge vedlikeholdbare og skalerbare Clojure-applikasjoner!

Gratis å komme i gang

Lær deg Clojure med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Definere og bruke navnerom» gratis?

Ja – hele teksten i «Definere og bruke navnerom» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Clojure: funksjonell programmering og backendutvikling på JVM-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.

Hva lærer jeg i «Definere og bruke navnerom»?

Lær å organisere kode og unngå navnekonflikter ved hjelp av Clojures navneromssystem. Du øver på Clojure: funksjonell programmering og backendutvikling på JVM med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Clojure: funksjonell programmering og backendutvikling på JVM?

Ingen tidligere erfaring er nødvendig. Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Definere og bruke navnerom»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Clojure: funksjonell programmering og backendutvikling på JVM-leksjonen?

Ja. Alle Clojure: funksjonell programmering og backendutvikling på JVM-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Forstå Clojure-makroer
  2. Definere og bruke navnerom
  3. Organisere kode med moduler
  4. Protokoller og multimethods for polymorfisme
← Tilbake til Clojure: funksjonell programmering og backendutvikling på JVM