ruby 0

97
Програмиране с Ruby лекция 0 10 октомври 2011

Upload: stefan-kanev

Post on 10-Jul-2015

1.435 views

Category:

Education


2 download

TRANSCRIPT

Програмиране с Rubyлекция 0

10 октомври 2011

тази седмица:за курса & първи стъпки в Ruby

...но преди това:

ще се опитам да ви убедяда отпишете курса

(отново)

труденстрашен

административнивъпроси

Ден Час Зала

Понеделник 19:00 101

Вторник 19:00 200

Кога?

искате ли да сменим залата?

http://fmi.ruby.bg/(скоро)

@rbfmi

оценяване

0

45

90

135

180180

150130

11090

Max6

54

3

Скалата

Задачи60

Тестове60

Проект60

Задължителните

Задачите

• десет броя• предават се онлайн• проверяват се автоматично• 0-6 точки

Тестове

• два броя• 30 въпроса за един час

• 30 точки всеки

Проекти

• на края на семестъра• вие измисляте или ние избираме• 60 точки

• 30 за функционалност, 30 за стил

Бонусите

участие в часучастие във форумите

елеганти решенияпомощ на другарче

Тежките ограничения

максимум X реда код в методмаксимум Х нива на влагане в методмаксимум Х метода в клас

Тежките ограничения

максимум 10 реда код в методмаксимум 3 нива на влагане в методмаксимум 7 метода в клас

за какво ще говорим в курса?

в дълбочинаняма да сме повърхностнивсички language feature-и

идиомиекосистема

Добър код

Добър код

“Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.”

— Edsger Dijkstra*

* изобретател на blog post-а

“Programs must be written for people to read, and only incidentally for machines to execute.”

— H. Abelson and G. Sussman

Принципи

SOLID

Single Responsibility PrincipleOpen-Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle

Law of Demeter

Single Level of Abstraction Principle(SLAP)

Практики

Refactoring

Test-DrivenDevelopment

TDD + refactoring = чернова

web frameworkнай-популярното нещо в Rubyняма да говорим за него(или поне най-много лекция-две)

вместо това:ред малки библиотеки

“Дялкам камъни”

“Храня жената и децата”

“Строя катедрали”

В този курс ще се учим как се дялкат камъни, а не как се строят катедрали.

за Ruby

Yukihiro “Matz” Matsumoto

designed for programmerproductivity and fun

Brevity

Simplicity

Balance

“Treating Code as an Essay”

характеристики

динамичен

$ cat hello.rbputs "Hello world!"forty_two = 6 * 9puts "The answer is #{forty_two}"

$ ruby hello.rbHello world!The answer to is 54

интерпретира се

general purposeмного web библиотеки

обектно-ориентиранс функционални елементи

вдъхновен от:Perl, Smalltalk, Python, Lisp

култура

open source!

$ gem install rails

29 245 библиотеки тази сутрин

133 923 хранилища, 50 491 потребителятази сутрин

community

много блогове

много много много много много блогове

screencasts & podcasts

колорит

_why the lucky stiff

elitism

David Heinemeir Hanson(автор на Rails)

David Heinemeir Hanson

през 2011:зрялост

иновация

nokogirisequelrspec

capybarasinatralolcat

GitHub

кой ползва Ruby?

Twitter

GitHub

Shopify

SoundCloud

SongKick

Groupon

Urban Dictionary

версии и интерпретатори

1.8 vs 1.9

ще ползваме само 1.9

JRubyIronRubyRubiniusMacRuby

ресурси

why’s poignant guide to Ruby http://mislav.uniqpath.com/poignant-guide/

Programming Ruby 1.9

The Ruby Programming Language

Ruby Best Practices

малко код

# Output "I love Ruby"say = "I love Ruby"puts say # Output "I *LOVE* RUBY"say['love'] = "*love*"puts say.upcase # Output "I *love* Ruby"# five times5.times { puts say }

днес на http://ruby-lang.org/

(1..9).select { |x| x.odd? }.map { |x| x ** 2 }

1.upto(10).inject { |a, b| a * b }

def factorial(n) 1.upto(n).inject { |a, b| a * b }end

puts factorial(10)

class Integer def factorial 1.upto(self).inject { |a, b| a * b } endend

puts 10.factorial

def prime?(n) 2.upto(n - 1).all? { |a| n.remainder(a).nonzero? }end

puts prime?(13)puts prime?(42)

class Integer def prime? 2.upto(pred).all? { |a| remainder(a).nonzero? } endend

puts 13.prime?puts 42.prime?

въпроси?