Portál AbcLinuxu, 2. května 2025 12:04
S programováním teprve začínámNo, muj kod taky neni dokonaly, ale je to trochu videt.
require '/home/nagyova/mzda/konstanty.rb'Vážně?
MALE = 0 FEMALE = 1 puts "Pohlavie: %s" % if gender == MALE then "mužské" else "ženské" end
Dik funguje...
Len mi to vyhodilo: "Pohlavie: mu??sk??"
Ruby nepodporuje unicode?
require File.join(File.dirname(__FILE__), 'konstanty.rb')
, od Ruby 1.9 je navíc k dispozici require_relative
. Ruby 2.0 přidává i __dir__ (podobně jako již zavedené __FILE__ a __LINE__) vhodné pro takové ty File.open a YAML.load.
--
43.times {print '*'} putsUrčitě než volat print v cyklu bych raději použil
puts '*'*43
--
... puts STR2 odpoved = gets test_vstupu_an(odpoved) if odpoved =~ /a/i sleva_na_dani += DRZITEL_ZTP end ...Není mi úplně jasné, proč používáš ty konstanty STR1 až STR4. Stejně tam máš v kódu napevno zadrátované to, čeho se která týká (sleva_na_dani). Nevím jestli nečekáš, že ty otázky se budou nějak výrazně často měnit a proto je chceš mít někde bokem, ale IMHO to nestojí za to snížení čitelnosti hlavni.rb. -- Jak už bylo řečeno výše, tak to rozdělení do souborů není úplně ideální. Hlavně je ale Ruby objektivně orientovaný jazyk a tak je škoda to úplně ignorovat.
class PlatovaKalkulacka SAZBA_ZDRAVOTNI_ZAMESTNAVATEL = 9.0 SAZBA_SOCIALNI_ZAMESTNAVATEL = 25.0 SAZBA_ZDRAVOTNI_ZAMESTNANEC = 4.5 SAZBA_SOCIALNI_ZAMESTNANEC = 6.5 SAZBA_DANE_Z_PRIJMU = 15.0 POPLATNIK = 2070 DRZITEL_ZTP = 1345 STUDENT = 335 DITE = 1117 attr_reader :hruba_mzda, :podepsane_prohlaseni, :ztp, :student, :pocet_deti def initialize(opts={}) @hruba_mzda = opts[:hruba_mzda] @podepsane_prohlaseni = opts[:podepsane_prohlaseni] || false @ztp = opts[:ztp] || false @student = opts[:student] || false @pocet_deti = opts[:pocet_deti] || 0 end def sleva_na_dani return 0 unless podepsane_prohlaseni val = POPLATNIK val += DRZITEL_ZTP if ztp val += STUDENT if student val end def super_hruba_mzda hruba_mzda + zdravotni_zamestnavatel + socialni_zamestnavatel end ... endNemáš potom ty konstanty a metody v globálním namespace, ale hezky u třídy, které se to týká. Navíc máš pak metody jako PlatebniKalkulacka#super_hruba_mzda, ve kterých je jen samotný výpočet dané hodnoty, nemáš to smíchané s kódem pro vstup/výstup. Se soubory jako metody.rb bych byl opatrný. Mám zkušenost, že takový soubor rychle bobtná (vyvojáři projektu si tam přihodí nějakou funkci, kterou zrovna rychle potřebují), dochází k duplikaci kódu a víceméně všechny ostatní součásti aplikace na tom závisí. Odstraňovat je to potom peklo, to se už raději v začátku snaž mít objektový návrh a ty metody si dávat rovnou tam, kam patří.
# encoding: utf-8 a = "vstup\n123" abort "chybný vstup" if a !~ /^[0-9]+$/ puts a.to_i()^ a $ označují začátek a konec řádku, ale ne začátek a konec řetězce. Pokud chceš kontrolu toho, že řetězec opravdu obsahuje jenom čísla, je potřeba
/\A[0-9]+\Z/
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.