02. Преглед на предизвикателството. GitHub Pull Requests

02. Преглед на предизвикателството. GitHub Pull Requests

02. Преглед на предизвикателството. GitHub Pull Requests

8 октомври 2014

Какво предстои

днес и в следващите няколко лекции

Пред-предговор

следващата сряда ще пием бира

Предговор

Бонус точки

отвъд сникерсите (последно напомняне)

Първите ви точки:

Малко тривиа

където ние питаме, а вие отговаряте

(носим сникерси)

Въпрос 1

Какво е irb ?

Интерактивна конзола.

Въпрос 2

Ако не знаем нещо за Руби - къде го търсим?

  • ri -> локално
  • Ruby-doc
  • APIDock
  • Google/Bing

Въпрос 3

Как се записват следните:

chunky  = 1 # локална променлива
Bacon   = 2 # константа
$larodi = 3 # глобална променлива

Въпрос 4

Каква е разликата между :name и "name"

:name е символ и е immutable, и се интернира.

"name" е низ.

Въпрос 5

Какво ще изведе и към какво ще се оцени следното?

"Ivan is here: #{0 == false}"

Няма да изведе нищо. Ще се оцени на:

"Ivan is here: false"

Въпрос 6

Към какво ще се оцени изразът?

010 + 010 > 1.7e1

false

Предизвикателството

Целта?

Предизвикателството

Решения

Някои грешки

Извеждате текст на екрана

Някои грешки

Индентация

Решения

def format_string(text_to_format, width)
        editted = text_to_format.upcase();
        editted = editted.gsub(/\s+/, ' ');
        editted = editted.strip();
        editted = editted.center(width);
        return editted;
end

Решения

def format_string(string, width)
  string.strip!
  string = string.gsub(/\s+/, " ").strip
  string.upcase!
  string = string.center(width)
end

Решения

def format_string(text, width)
  # 1) Remove spaces from begining and the end
  # and save the text value in a new variable just in case
  format_text = text.strip

  # 2) Replace the multiple spaces with just one
  format_text = format_text.gsub(/\s+/, ' ')

  # 3) Make all letters uppercase
  format_text.upcase!

  # 4) Add spaces in the begining and end if the string is too short.
  # The number of space on both sides must be either equal or one more on the right side
  text_length = format_text.length
  if text_length < width
    remaining = width - text_length
    left = (remaining / 2).floor
    right = remaining - left

    format_text = (' ' * left) + format_text + (' ' * right)
  end

  # 5) We're done. Return the result
  return format_text
end

Решения

Забележки

Няколко съвета (0)

Не се грижете за невалиден вход, ако не е казано изрично

unless string.nil?
  # код ...
end

string

Няколко съвета (1)

fixed_string = string.strip.gsub(/(\s|\u00A0)+/, ' ').upcase

Няколко съвета (2)

Решението

без забележки

def format_string(string, width)
  string.strip.squeeze(' ').upcase.center(width)
end

Правила на Кент Бек за прост и ясен дизайн

My guiding light is Kent Beck's rules of Simple Design (източник):

  1. The code must first be correct (as defined by tests);
  2. then it should be a clear statement of the design (what J.B.Rainsberger calls "no bad names");
  3. then it should contain no duplication (of text, of ideas, or of responsibility);
  4. and finally it must be the smallest code that meets all of the above.

It's time to stop refactoring when the code makes a reasonable stab at meeting those goals, and when any further changes would add no further benefit.

Първа задача

Стил

Споделяне на решения

a.k.a. преписване

GitHub приноси

pull request-ите и животът ви

Pull request-ите и общуването

Pull request-и: някои насоки

Преди да пуснете pull request с вашето предложение за промяна:

Въпроси