Ruby Academy · Lektion

Praktiske anvendelser

Parsing af strukturerede data

Lektion 4 af 413 trin

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

Hå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}")
end

Mæ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}")
end

Matchning 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}")
end

Klasse 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")
end

Sikker 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}")
end

Hurtigt 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_keys til brugerdefinerede objekter
  • Tilføj altid else for 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)
end
Gratis at komme i gang

Læ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

  1. Grundlæggende case/in
  2. Array- og hash-patterns
  3. Find-patterns og guards
  4. Praktiske anvendelser
← Tilbage til Ruby Academy