Praktiske anvendelser
Parsing af strukturerede data
Praktiske anvendelser er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvorfor mønstermatchning er stærk
Mønstermatchning er bedst, når du håndterer strukturerede data: API-svar, konfigurationstræer og fortolkede filer. Den erstatter indlejrede kontroller med if/dig med ét læsbart udtryk.
require 'json'
resp = JSON.parse('{"ok":true,"data":42}', symbolize_names: true)
case resp
in { ok: true, data: }
puts(data)
endHåndtering af succes og fejl fra API'er
Match forskellige svarstrukturer i separate grene, og udtræk de rigtige felter fra hver.
def handle(resp)
case resp
in { status: 'ok', result: }
"got #{result}"
in { status: 'error', message: }
"error: #{message}"
end
end
puts(handle({ status: 'error', message: 'bad input' }))Fortolkning af kommandolinjeargumenter
Match et Array af argumenter for at sende kommandoer videre på en enkel måde.
def run(args)
case args
in ['add', a, b]
a.to_i + b.to_i
in ['echo', *rest]
rest.join(' ')
end
end
puts(run(['add', '3', '4']))
puts(run(['echo', 'hi', 'there']))Validering af postens struktur
Brug et mønster til at kontrollere, at en post har de nødvendige felter og typer, før du behandler den.
def valid?(rec)
case rec
in { name: String, age: Integer => a } if a >= 0
true
else
false
end
end
puts(valid?({ name: 'Ada', age: 36 }))
puts(valid?({ name: 'X', age: -1 }))Dekonstruktion af indlejret konfiguration
Hent dybt indlejrede konfigurationsværdier ud i en enkelt matchning i stedet for at kæde opslag sammen.
cfg = { server: { host: 'localhost', port: 8081 } }
case cfg
in { server: { host:, port: } }
puts("#{host}:#{port}")
endMærkede unioner
Et almindeligt funktionelt mønster: Data mærkes efter type og sendes videre ud fra mærket.
def area(shape)
case shape
in { type: 'circle', r: }
(3.14 * r * r).round(2)
in { type: 'rect', w:, h: }
w * h
end
end
puts(area({ type: 'rect', w: 3, h: 4 }))Matchning med deconstruct
Brugerdefinerede objekter kan matches, hvis de definerer deconstruct (til Array-mønstre). Struct gør dette automatisk.
Point = Struct.new(:x, :y)
case Point.new(1, 2)
in [x, y]
puts("#{x},#{y}")
endMatchning med deconstruct_keys
Definér deconstruct_keys for at understøtte Hash-mønstre. Struct leverer også dette og muliggør navngiven matchning.
Point = Struct.new(:x, :y)
case Point.new(3, 4)
in { x:, y: }
puts("x=#{x} y=#{y}")
endKlasse med mønster
Kombiner et typemønster med et Hash-mønster for at matche en bestemt klasse og dens felter.
User = Struct.new(:name, :admin, keyword_init: true)
case User.new(name: 'Ada', admin: true)
in User(admin: true, name:)
puts("#{name} is an admin")
endSikker reservehåndtering
Angiv altid en else, når inddata muligvis ikke matcher, så en undtagelse bliver til håndtering uden fejl.
def parse(data)
case data
in { id: Integer => id }
"id #{id}"
else
'unrecognized'
end
end
puts(parse({ name: 'x' }))Sådan samles det hele
Et realistisk forløb: Fortolk JSON, match strukturen, valider med en vagtbetingelse, og udfør en handling – alt sammen i ét overskueligt udtryk.
require 'json'
event = JSON.parse('{"kind":"purchase","amount":150}', symbolize_names: true)
case event
in { kind: 'purchase', amount: Integer => amt } if amt > 100
puts("big purchase: #{amt}")
in { kind: 'purchase', amount: }
puts("purchase: #{amount}")
endHurtigt tjek
Hvilken metode skal en brugerdefineret klasse definere for at understøtte Hash-mønstermatchning som in { x:, y: }?
Opsummering: Praktiske anvendelser
Du har anvendt mønstermatchning på virkelige problemer:
- Videresendelse af API-svar og kommandoer
- Validering af postens struktur med vagtbetingelser
- Dekonstruktion af indlejret konfiguration og mærkede unioner
deconstruct/deconstruct_keystil brugerdefinerede objekter- Tilføj altid
elsefor sikker reservehåndtering
Du har gennemført kurset i Ruby-mønstermatchning.
case { type: 'circle', r: 2 }
in { type: 'circle', r: } then puts(3.14 * r * r)
endLær Ruby med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 109
Ofte stillede spørgsmål
Er lektionen “Praktiske anvendelser” gratis?
Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Praktiske anvendelser”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Praktiske anvendelser”?
Parsing af strukturerede data Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ruby Academy?
Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Praktiske anvendelser”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ruby Academy-lektion?
Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende case/in
- Array- og hash-patterns
- Find-patterns og guards
- Praktiske anvendelser