Portál AbcLinuxu, 2. května 2025 12:04

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
16.6.2013 09:12 JS
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
S programováním teprve začínám
No, muj kod taky neni dokonaly, ale je to trochu videt. :-) Zkusim par konstruktivnich poznamek, snad te to neodradi:

- Davat do ruznych souboru ma smysl veci, co spolu nesouvisi, nebo se naopak pouzivaji z vice modulu. Pri velikosti tveho programku by asi davalo lepsi smysl dat to vsechno do jednoho.

- Melo by smysl napsat si funkce pro samotny vypocet, a oddelit je od vstupu a vystupu.

- Asi by bylo logictejsi mit funkce pro vstup a zaroven jeho validaci nez jen jeho validaci. Ditto pro vystup - bylo by logictejsi mit funkci pro vystup zaokrouhlene hodnoty nez samotne zaokrouhleni.
16.6.2013 11:11 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevím co vlastně je účelem ukazky programu. Jestli je ukázat Ruby tak trochu promiň,jestli je to jednoduchý program na výpočet mezd, tak bych měl několik věcných připomínek.

Definice konstant bez platnosti, je minimálně kontraproduktivní. program počítá správně v prosinci, nemusí to však platit v lednu. Update programu (modulu konstant ) není to správné ořechové protože funkce výpočtu daně pro určitý a pod. můžeš potřebovat i v dalších letech.

V programu máš i věcné chyby odvody zaměstnavatele se nezaokrouhlují u pracovníků, ale v součtu. Do daně, ale vstupují zaokrouhlené . Co když sleva na daní je větší než daň. Chybně daň ze základu do 100 Kč. Atd.

Pozor na zaokrouhlení. Čeští zákonodárci si libují v nesmyslu, nepoužívat běžné zaokrouhlení, nýbrž ho definovat v zákonech, systémem co kus to originál.

Jinak pro předvedení Ruby, bych se přiklonil k názoru definuvat vstupní funkce s validací.

Jen doufám, že jsem ti nezkazil chuť programovat. Jen se ještě nějakou dobu vyhýbej mzdám, je to vyšší dívčí výjimek a nesmyslů, v nichž se nevyznají ani autoři, ani kníže pekel Lucifer.
16.6.2013 12:13 sad
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Nebojte, tohle určitě není základ pro nový svobodný účetní software. Je to přesně tak, jak píšete na začátku, jen jsem chtěl ukázat něco z Ruby.

Větší sleva na dani než je daň, je ošetřena tímto: if zaloha_na_dan < 0 then zaloha_na_dan = 0 end

Ale máte pravdu, že jsem zapomněl, na základ daně pokud je do 100 Kč, přitom jsem to měl vyřešené, když jsem trochu laboroval s daňovým bonusem na dítě, ale potom jsem program předělával a na toto jsem zapomněl.
Josef Kufner avatar 16.6.2013 12:05 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
Zrovna tohle je jeden z ukázkových příkladů, kde se hodí využít objektově orientovaného programování. Vyrob si interface, který definuje API výpočetního algoritmu, pak vytvoř třídu, která bude podle data platnosti předávat výpočet té správné implementaci. Vstup a výstup bude mimo tyto třídy a jediné co zavoláš, je ta "rozdělovací" třída. Když pak za pár měsíců přijde změna ve výpočtu, vyrobíš další implementaci, doplníš konfiguraci rozdělovací třídy a máš hotovo.
Hello world ! Segmentation fault (core dumped)
David Watzke avatar 16.6.2013 12:09 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
require '/home/nagyova/mzda/konstanty.rb'
Vážně? :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
16.6.2013 12:17 sad
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
To víš, tahle baba vleze všude.
16.6.2013 13:20 xxar3s
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
a dá s v ruby vyhodnocovať podmienka ako výraz?

príklad:
MALE = 0
FEMALE = 1

puts "Pohlavie: %s" % if gender == MALE then "mužské" else "ženské" end
Bystroushaak avatar 16.6.2013 13:35 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Co to prostě zkusit?
16.6.2013 13:44 xxar3s
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy

Dik funguje...

Len mi to vyhodilo: "Pohlavie: mu??sk??"

Ruby nepodporuje unicode?

17.6.2013 12:01 nyan
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Ruby nepodporuje unicode?
Zalezi na verzi ruby a tom, co myslite slovem "podporuje" ;-)
pavlix avatar 16.6.2013 22:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
Na jednu stranu, sociální a zdravotní se takhle počítat nedá, výpočet je špatný, na druhou stranu, všechny ty jednoduché věci se ve výpočtu řeší na první pohled docela složitě.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
17.6.2013 12:11 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, pár poznámek:

Absolutní cesty jsou opravdu zlo, toto fakt nepoužívat. Běžný idiom je 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 '*'}
puts
Urč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. :-) Začal bych nějak takto:
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

  ...
end
Nemáš 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ří.
17.6.2013 12:38 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Jo a ještě pozor na ty regulární výrazy, tak jak to máš teď (bez ^ a $) ti to schroustá i to, co požadovaný formát obsahuje jen jako substring. Třeba "bla" máš jako kladnou odpověď na otázku typu A/N. Nebo "number88" ti projde validací, ale String#to_i ti z toho udělá 0.
17.6.2013 13:23 sad
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Díky za velice konstruktivní kritiku a vidím, že na těch základech ještě budu muset hodně zapracovat. Hlavně si mě překvapil s těmi regulérními výrazy, fakt tam projde mzda třeba jako "aaaaaaaa1.", to je v pytli :)
18.6.2013 14:27 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Jenom abych malinko doplnil to o těch regulárech. Na vstupy získané pomocí gets jsou znaky ^ a $ asi v pohodě, ale jinak doporučuju zkusit tohle:
# 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/.
Quando omni flunkus moritati
14.4.2015 21:52 Hovlo
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
Já jsem líný na takové programování, hodím tam tabulku a je vyřešeno:-) tady jsou důkazy http://www.mzdy-vypocet.cz
25.9.2015 07:54 Program588
Rozbalit Rozbalit vše Re: Programování v Ruby - Výpočet čisté mzdy
Odpovědět | Sbalit | Link | Blokovat | Admin
To bude zlozite. Radeji spravim prehladni tabulku pro vypocet mzdy .

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.