Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys · Oppitunti

Nimiavaruuksien määrittäminen ja käyttö

Opitte järjestämään koodia ja estämään nimikonflikteja Clojuren nimiavaruusjärjestelmän avulla.

Oppitunti 2/411 vaihetta

Nimiavaruuksien määrittäminen ja käyttö on ilmainen Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Miksi nimiavaruudet ovat tärkeitä

Kuvitelkaa rakentavanne suurta sovellusta, jossa on paljon tiedostoja ja funktioita. Ilman järjestystä saatatte vahingossa käyttää samaa nimeä eri asioille, mikä aiheuttaa sekaannusta ja virheitä.

Clojuren nimiavaruudet auttavat järjestämään koodin loogisiin ryhmiin, estävät nimiristiriitoja ja helpottavat projektien hallintaa.

Nimiavaruuden määrittäminen

Jokainen Clojure-lähdetiedosto alkaa ns-määrityksellä. Tämä makro määrittää tiedoston sisältämän koodin nimiavaruuden. Se vastaa yleensä tiedoston polkua.

Esimerkiksi tiedostossa src/my_app/core.clj määritettäisiin tyypillisesti nimiavaruudeksi my-app.core.

(ns my-app.core)

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

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

Nimiavaruuksien nimeämiskäytännöt

Clojure-nimiavaruudet noudattavat hierarkkista rakennetta Java-pakettien tai tiedostopolkujen tapaan. Niissä käytetään yleensä kebab-case-tyyliä eli väliviivoja.

  • my-project.core: Pääsisäänkäynti tai ydintyökalut.
  • my-project.utils: Yleiset aputoiminnot.
  • my-project.db.sql: Tietokannan käsittelylogiikka.

Tämä rakenne auttaa pitämään koodin modulaarisena ja helposti navigoitavana.

Muiden nimiavaruuksien lataaminen komennolla `require`

Toisessa nimiavaruudessa määritettyjen funktioiden tai kirjaston käyttämiseksi se täytyy vaatia. require-määritys sijoitetaan yleensä ns-muodon sisään käyttäen nimiavaruussymbolien vektoria.

Tässä lataamme clojure.string-nimiavaruuden, joka on merkkijonojen käsittelyyn tarkoitettu sisäänrakennettu kirjasto.

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

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

Nimiavaruuksien aliakset komennolla `:as`

Kokonaisilla nimiavaruuksien nimillä kirjoittaminen voi olla työlästä. :as-avainsanalla, jota käytetään :require-vektorin sisällä, voit luoda lyhyemmän aliaksen vaaditulle nimiavaruudelle.

Tämä tekee koodista tiiviimpää ja helppolukuisempaa selkeydestä tinkimättä.

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

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

Valikoiva lataaminen: `:refer`

Joskus tarvitset suuresta nimiavaruudesta vain muutaman funktion tai haluat välttää nimien törmäyksiä. Voit käyttää :refer-valintaa :require-määrityksen sisällä tuodaksesi nykyisen nimiavaruutesi näkyvyysalueelle vain erikseen määritetyt symbolit.

(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))))

Clojuren ydin: aina käytettävissä

Olet ehkä huomannut, ettei sinun tarvitse erikseen require-komennolla ladata funktioita, kuten +, map, println tai defn.

Tämä johtuu siitä, että nämä keskeiset funktiot kuuluvat clojure.core-nimiavaruuteen, joka ladataan ja jonka symbolit otetaan käyttöön automaattisesti jokaisessa luomassasi uudessa nimiavaruudessa. Se on Clojuren standardikirjasto.

`in-ns`-makro (REPL-käyttö)

in-ns-makro vaihtaa nykyisen nimiavaruuden. Se on erityisen hyödyllinen työskenneltäessä vuorovaikutteisesti REPL:ssä (Read-Eval-Print Loop), sillä sen avulla voit vaihtaa kontekstia muuttamatta lähdetiedostoasi.

Yleensä et käytä in-ns-makroa sovelluksesi lähdekoodissa.

(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`: yksinkertaisempi mutta riskialttiimpi tapa

Vanhemmassa Clojure-koodissa tai opetusmateriaaleissa saatetaan mainita use-makro. Se muistuttaa require-makroa, mutta tuo automaattisesti kaikki vaaditun nimiavaruuden julkiset funktiot nykyiseen nimiavaruuteen.

Vaikka tämä on kätevää, se voi helposti johtaa nimiristiriitoihin (esimerkiksi jos kaksi kirjastoa määrittelee count-funktion). Siksi use-makron sijaan suositellaan yleensä require-makroa yhdessä :as- tai :refer-valinnan kanssa.

Pikatarkistus: nimiavaruuksien käyttö

Mitkä seuraavista Clojuren nimiavaruuksia ja niiden käyttöä koskevista väitteistä ovat TOSIA?

Kertaus: Clojure-koodin järjestäminen

Tässä oppitunnissa opit, kuinka tärkeitä nimiavaruudet ovat Clojure-projektien järjestämisessä ja nimiristiriitojen estämisessä. Käsittelimme seuraavat aiheet:

  • Nimiavaruuden määrittäminen ns-makrolla.
  • Hierarkkisten nimeämiskäytäntöjen merkitys.
  • Ulkoisen koodin lataaminen require-makrolla.
  • Aliasten luominen :as-valinnalla selkeämmän koodin kirjoittamiseksi.
  • Symbolien valikoiva tuominen :refer-valinnalla.
  • Syy siihen, miksi clojure.core-funktiot ovat aina käytettävissä.
  • in-ns-makron rooli REPL:ssä ja syy siihen, miksi use-makroa yleensä vältetään.

Nimiavaruuksien hallinta on tärkeää ylläpidettävien ja skaalautuvien Clojure-sovellusten rakentamisessa!

Aloita maksutta

Opi Clojure tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Nimiavaruuksien määrittäminen ja käyttö” ilmainen?

Kyllä – oppitunnin ”Nimiavaruuksien määrittäminen ja käyttö” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssin, päivitä CoddyKit PROhon. Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Nimiavaruuksien määrittäminen ja käyttö”?

Opitte järjestämään koodia ja estämään nimikonflikteja Clojuren nimiavaruusjärjestelmän avulla. Harjoittelet Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Nimiavaruuksien määrittäminen ja käyttö”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunnilla?

Kyllä. Jokainen Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Clojuren makrojen ymmärtäminen
  2. Nimiavaruuksien määrittäminen ja käyttö
  3. Koodin organisointi moduuleilla
  4. Protokollat ja multimethodit polymorfismiin
← Takaisin: Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys