Jak jsem počeštil Ruby

Ne, nebojte se. Nezbláznil jsem se, ani jsem doopravdy neudělal z Ruby dokonalý analyzátor jazyka českého. Jen jsem pro výuku programování svého syna dospěl k zajímavému pokusu. Neboť ještě neovládá tak dokonale výrazivo, použité u programovacích jazyků, rozhodl jsem se, že zkusím alespoň “počeštit” Ruby.

Princip je velice jednoduchý. Jistě by to šlo napsat ještě lépe, ale jako prototyp mi to docela stačilo. Vše je v jednom modulu, který stačí přihrát přes require.

module Dictionary
  module Czech
    Pairs = {
      'capitalize' => 'prvni_velke',
      'capitalize!' => 'prvni_velke!',
      'each' => 'kazdy',
      'each_byte' => 'kazdy_bajt',
      'each_char' => 'kazdy_znak'
    }
  end
end

class String
  def method_missing(symbol, *args, &block)
    if Dictionary::Czech::Pairs.invert.keys.include?(symbol.to_s)
      self.send(Dictionary::Czech::Pairs.invert[symbol.to_s], *args)
    else
      super
    end
  end
end

Vemte prosím v potaz, ze slovník není kompletní, jen jsem vybral pár metod. Předefinování metody method_missing jsem pak provedl i pro třídy Fixnum, Array, Hash a samozřejmě můžete i pro další.

Jak to použít?

Velice jednoduše :-)

require 'dictionary_czech'

[10,20,30].kazdy do |prvek|
  puts prvek
end

3.krat do |cislo|
  puts 10*cislo
end

Pokud byste chtěli získat nějaký základ pro slovník, použijte tuto:

({}.methods + [].methods + 1.methods + "a".methods).uniq.sort

Předpokládám, že udělat si z toho krásné asociativní pole zvládne každý. :-)

Leave a Reply

Your email address will not be published. Required fields are marked *

7 + 1 =