Ruby on küllaltki populaarne keel, kuid Eestis seda väga palju ei kasutata. Siiski selle keele õppimine on väärtuslik tegevus, sest see mõjutab mõttemaailma küllaltki palju.
Rubyt peetakse vägagi loetavaks keeleks ja tõesti ilma süntaksit tundmata võib sellest kenasti aru saada. Üks tore õpetus on Why’s (Poignant) Guide to Ruby, mida lugesin Best Software Writings I raamatust.
products.sort do |a, b| a.price <=> b.price end
Enamik koodi näeb kena ja loetav välja kuigi seal on ka nö säästu funktsioone: to_s.
Ruby populaarsemaks muutumisega hakati rohkem ka DSL-idest rääkima. Rubys on võimalik seda realiseerida küllaltki lihtne. Staatiline maailm sai sellest ka indu ja hakkasid kasutama ilusaid liideseid (Fluent Interface), mis teeb koodi lihtsamaks ja müravabamaks.
var product = new Product();
product.Name = "Goldstein Elite Pen";
product.Description = "Fancy looking blue pen.";
product.Manufacturer = "ABC Company";
product.Price = 100m;
var product = new Product()
.Named("Goldstein Elite Pen")
.DescribedBy("Fancy looking blue pen.")
.ManufacturedBy("ABC Company")
.Costs(100m);
C# 3.0 juurde tulnud lambda süntaksi abiga on võimalik mõistuse piires kasutada ka closure, mis teeb elu küllaltki meeldivaks. Rubys on seda võimalik teha algusest peale.
Veel üks mõnus lähenemine Rubys on RubyGems. Selle abiga saab versioonida ja deployda. See on tõeliselt lihtne viis:
gem install rake --include-dependencies
tuleb kirjutada konsooli ja enterit vajutada.
Teil võib kerkida küsimus, et miks peaks siis Rubyt õppima, kui neid asju saab ka teistes keeltes kasutada ja hakata natukene teise nurga alt maailma vaatama? .NET maailmas on suur viha XML seadistuste vastu ning build skriptid on peamiselt selles deklareeritud. Sellest tulenevalt kasutakse Rake‘ selleks, mis annab tunduvalt suuremad võimalused. Teine alternatiiv on PSake, mis töötab PowerShell skriptidel. Näite Rake kasutusest teen veidi hiljem.
Peale build skriptide on mõistlik hakata ka teste Rubys kirjutama. Vaadake korra projekti Cucumber ja mõelge, kas praegune viis on veel mõistlik. Probleeme võib tekkida IronRubyga, kuid kaaluda seda mõtet tasuks.
Nende ametlikus näites testitakse järgnevat klassi:
public class Calculator
{
private List<int> args = new List<int>();
public void Push(int n)
{
args.Add(n);
}
public int Add()
{
int result = 0;
foreach(int n in args)
result += n;
return result;
}
}
Millele lisatakse test järgnevalt:
Feature: Addition
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have entered 50 into the calculator
And I have entered 70 into the calculator
When I press add
Then the result should be 120 on the screen
More Examples:
| input_1 | input_2 | output |
| 20 | 30 | 50 |
| 2 | 5 | 7 |
| 0 | 40 | 40 |
Ning seda viib läbi järgnev Ruby skript:
Before do @calc = Demo::Calculator.new end Given "I have entered $n into the calculator" do |n| @calc.push n.to_i end When /I press add/ do @result = @calc.Add end Then /the result should be (.*) on the screen/ do |result| @result.should == result.to_i end
Tundub päris meeldiv viis teste kirjutada. Kui tundub see liiga tülikas, siis tasuks mõelda seda kasutada vastuvõtutestide jaoks.
Head müramist Rubyga! Kui kellelgi on veel mõtteid, kuidas Rubyt ära kasutada teiste keeltega või kuidas see mõttemaailma muudab, siis andke teada.
Loe veel sarnastel teemadel:
- Rubylik C#: Why’s (Poignant) Guide to Ruby, 23. oktoober
- Iluvõtted koodile III, 27. aprill
- Iluvõtted koodile II, 13. aprill
- Avatud uuendustele, kinni muudatustele, 15. oktoober
- Ebameeldivad erijuhud, 21. jaanuar
4 kommentaari
1
Eestis on ka väike, tore ja abivalmis Ruby arendajate community http://ruby.ee
Priit
11:44, 27. aprill
2
Väike tundus ta küll, kuid loodetavasti kasvab suuremaks.
Marek Tihkan
12:54, 27. aprill
3
Hoi!
Kõigepealt üldise tagasisidena tahaks ütelda aitäh ja kiita asjaliku blogi/artikli pidamise eest. Vestlusi efektiivsest, targast ja tänapäevasest tarkvarategemisest ei leidu kohalikus teemaga tegelevas kogukonnas just tihti.
Aga Cucumberist – featurete üleskirjutamise DSL-i on võimalik kasutada ka eestikeelse variatsiooniga. Väga mugav, kui projekti enda ja realiseeritava valdkonna töökeeleks juhtub olema eesti keel.
See sama kalkulaatori näide eestikeelsena oleks selline – http://github.com/aslakhellesoy/cucumber/tree/ec0079f3fd18b60227f5531b425636c5a244874e/examples/i18n/et
Hetkel leiab eestikeelne featurede üleskirjutamine kasutamist ühes rubyonrails-põhises riigisektori projektis ja võib märkida et päris lust on kundedele tagasisidet anda ja teostatavate omaduste teemalist vestlust pidada sellises vormis.
Karu
13:09, 27. aprill
4
Foorumist jäi juba silma, et oled teinud Cucumberile eesti keele toe juurde. Tundub igati mõnus olevat.
Marek Tihkan
13:56, 27. aprill
Lisa kommentaar
KAIZEN FEED
Telli endale Kaizeni uudisvoog
KOMMENTAARIDE FEED
Telli endale kommentaaride voog
KAIZEN TWITTER
Lühiuudised Kaizeni autoritelt
KAIZEN FACEBOOK
Liitu Kaizeniga
MIS ON KAIZEN?
Kaizen on Saiku tarkvaraarendusealane blogi, kus kirjutame erinevatest lähenemistest meisterlikule tarkvaraarendusele.
KATEGOORIAD
- .NET (18)
- Analüüs/Arhitektuur (11)
- Arendus (66)
- Ettevalmistus (1)
- Juhtimine (2)
- Varia (23)
SILDIPILV
- .NET (41)
- ilus kood (23)
- Arendus (23)
- C# (20)
- Analüüs/Arhitektuur (14)
- Testimine (10)
- raamat (8)
- Ruby (8)
- projektijuhtimine (8)
- printsiibid (6)
- produktiivsus (5)
- ReSharper (5)
- PHP (5)
- NHibernate (4)
- objekt-orienteeritud (4)
- pidev integratsioon (4)
- Viited (4)
- agile (4)
- Java (4)
- Geekdinner (4)
- lean (4)
- raamatukogu (4)
- CI (3)
- Cruise Control.NET (3)
- Robert C. Martin (3)
- scrum (3)
- iteratsioon (3)
- suhtlus (3)
- jQuery (2)
- TechEd 2008 (2)
- Visual Studio (2)
- valideerimine (2)
- intervjuu (2)
- analüüs (1)
- ASP.NET (1)
- ümberstruktureerimine (1)
- üritus (1)
- CodeRush (1)
- dokumentatsioon (1)
- Kent Beck (1)
- LINQ (1)
- Martin Fowler (1)
- Moq (1)
- Rhino Mocks (1)
- stackoverflow (1)
- võltsitud objektid (1)
- Whiteboard Wednesday (1)
- hindamine (1)
- tarkvara kvaliteet (1)
- ajagraafikud (1)
- Saiku (1)
- koolitus (1)
- tagasivaate (1)
- koosolek (1)
- dünaamilised keeled (1)
- staatilised keeled (1)
- FluentNHibernate (1)
- facebook (1)
- aastapäev (1)
- Rake (1)
- Oredev 2008 (1)
- toyota way (1)
- raiskamine (1)
- NDepend (1)
- podcasts (1)
- väle tarkvaraarendus (1)
- raido tonts (1)
- minimal marketable feature (1)
- kasutajalugu (1)
- twitter (1)
- Joomla! (1)
- MVC (1)
- andmebaas (1)
- versioonimine (1)
- diskussioon (1)
- regulaaravaldised (1)
- motiveerimine (1)
- mõõdikud (1)
- agileestonia (1)
- riistvara (1)
- koolitused (1)
- kujundus (1)
- kodulehed (1)
- veeb (1)
