Александрина обнови решението на 16.10.2015 00:46 (преди около 10 години)
Индентирай правилно, на тази задача ще отнемаме точки за това. Оставяй място около операторите (визирам
=,-).-
Не сравнявай неща в условието на
ifсtrueилиfalse.Например 22-ри ред може да се запише така:
if !problem_one and !problem_twoА 43-ти ред може да се запише така:
if after_one or after_twoОбщо взето сравнявайки булев израз с
trueполучаваш същия булев израз. Сравнявайки булев израз сfalseполучаваш отрицанието на булевия израз.Другото е, че имаш разни места в кода (31-ви и 43-ти ред), където имаш
if булев_изрази после връщашtrue, ако булевия израз еtrueиfalse, ако булевия израз еfalse. Това е безсмислено. Връщай си стойността на булевия израз, която еtrue, ако той еtrue, илиfalse, ако той еfalse.Например целия код от 43-ти до 45-ти ред може да се замени от единствения ред със следния булев израз:
after_one or after_two -
Нека направим този 43-ти ред още по-четим :) Змията е в
danger?, акоafter_one or after_two. Това не звучи много смислено. Ако преименуваме променливите, може да стане например така:def danger?(...) ... dead_after_one_move or dead_after_two_moves endАхаа.. Сега вече разбирам какво се случва. Неоспоримо по-ясно е от:
if(after_one == true || after_two == true) true else false endРуби е един от езиците, които ти дават много свобода на изразяване, затова и го обичаме толкова. Възползвай се от възможностите му !

Като си говорим за имена...
problem_oneиproblem_twoне са ок. Нищо не ми казват... Можеш ли да измислиш по-добри ?Несъмнено имената са много важни. С тях много по-лесно се разбират намеренията на кода. В Руби това е залегнало дълбоко в езика. Някои методи от
Arrayнапример дори си имат синоними, защото една дума звучи по-добре от друга в различен контекст. Използвай имената, които звучат добре. Напримерsnake.lastза достъпване на последен елемент, вместо да правишsnake[snake.length - 1]. Доста по-кратко и ясно е. Разгледай подробно документацията наArray, ще ти бъде супер полезно.Когато имаш някаква сложна конструкция (като тази на 5-ти, 13-ти, 30-ти ред), която на всичкото и отгоре се повтаря, може да я скриеш зад фунция с ясно име. Помисли какво точно прави въпросната конструкция. Дай ѝ име. Така всеки път някой друг като я погледне ще разбере какво се случва, вместо да трябва да интерпретира кода.
Булевите изрази на 31-ви и на 33-ти ред също може да се именуват подобаващо. Успех !
