16. Git, част 2. Клас-променливи. RDoc.

16. Git, част 2. Клас-променливи. RDoc.

16. Git, част 2. Клас-променливи. RDoc.

14 декември 2015

Днес

Проекти

Какво очакваме да ни изпратите?

или, как да напишете спецификация

Лоши примери (1)

Лоши примери (2)

Лоши примери

(Не)подходящи теми

или, къде Ruby е силен и къде - не

(Не)подходящи теми

изключения

Поне два интерфейса

Въпроси?

Ще продължим с още малко слайдове за Git.

Седма задача

Машината на времето

git revert <commit>

Машината на времето

git reflog

Игнориране на файлове

.gitignore

Игнориране на файлове

Формат на .gitignore

/bar            # Файла/директорията bin в главната директория на проекта
bin             # Всички файлове и директории с име bin
bin/            # Всички директории с име bin
compiled/*.html # Всички файлове с разширение html в директория compiled
lib/**/*.txt    # Всички текстови файлове в lib или нейна поддиректория
*.exe           # Всички изпълними файлове за Windows 

git rebase

Най-мощният инструмент за пренаписване на историята

git checkout killer-feature
git rebase master
git rebase -i
git rebase -i master
git rebase -i HEAD~4
git pull --rebase

git rebase

git blame

"Кой написа това?"

git blame lectures/index.yml

Акценти

Защо git по този начин?

Изводи

Искайте помощ:

Графичен интерфейс

GitX

Графичен интерфейс

TortoiseGit

Графичен интерфейс

GitHub

Графичен интерфейс

SourceTree

Материали

Въпроси дотук?

The Ten Commandments of Egoless Programming

The Ten Commandments of Egoless Programming

извадка

Object#eql?

1 == 1.0     # => true
1.eql?(1.0)  # => false

$! и $@

Class#new и Object#initialize

Всъщност, #initialize е просто instance метод.

Class#new е имплементиран горе-долу така:

class Class
  def new
    object = self.allocate
    object.send :initialize
    object
  end
end

Object#dup, Object#clone, #initialize_copy

retry в ensure

retry изпълнява begin блока отначало.

retries_left = 3

begin
  connect_to_facebook
rescue ConnectionError
  retries_left -= 1
  retry if retries_left > 0
end

next, break, redo, retry

next, break, redo, retry

next прекратява работата на блока:

def bar
  p "bar started"
  p yield
  p yield
  p "bar finished"
end

bar do
  p "block started"
  next "Return value"
  p "block finished"
end

Резултатът ще е:

"bar started"
"block started"
"Return value"
"block started"
"Return value"
"bar finished"
=> "bar finished"

next, break, redo, retry

break прекратява работата на блока и на метода, който го извиква:

def bar
  p "bar started"
  p yield
  p yield
  p "bar finished"
end

bar do
  p "block started"
  break "Return value"
  p "block finished"
end

Резултатът ще е:

"bar started"
"block started"
=> "Return value"

Въпроси дотук?

Следват няколко думи за клас променливи.

Клас променливи

class Person
  @@count = 0

  def initialize
    @@count += 1
  end

  def self.how_many
    @@count
  end
end

Person.new
Person.new
Person.how_many # => 2

Клас променливи

семантиката

Клас променливи

class B
  @@foo = 1
  def self.foo() @@foo end
  def self.hmm() @@bar end
end

class D < B
  @@bar = 2
  def self.bar() @@bar end
  def self.change() @@foo = 3; @@bar = 4; end
end

[B.foo, D.foo, D.bar] # => [1, 1, 2]
B.hmm                 # => error: NameError
D.change
[B.foo, D.foo, D.bar] # => [3, 3, 4]
B.hmm                 # => error: NameError
D.hmm                 # => error: NameError

Документация в Ruby

RDoc

YARD

Други - Rails API документацията

Други - API Dock

RDoc

Подробно относно RDoc

Въпроси