Показать сообщение отдельно
  #24 (permalink)  
Старый 25.07.2011, 02:12
Аватар для SlavaPav
Аспирант
Отправить личное сообщение для SlavaPav Посмотреть профиль Найти все сообщения от SlavaPav
 
Регистрация: 25.02.2010
Сообщений: 57

Сообщение от monolithed Посмотреть сообщение
Стефанов, Фленаган, Закас
Я и имел ввиду этих авторов + Ресиг. Забыл про Закаса. Потому что так и не читал.
Мне TDD кажется эффективной и для небольшого кода. Если привыкнуть, то циклы - "тест-провал-код-успех-рефакторинг" будут занимать немного времени, плюс экономится время затрачиваемое на поиск и устранение ошибок.
// очень простая функция, которую писал по задаче из ЕГЭ
function extractMaxNumber(str) {
    argumentMustBe('string');
    
    return assembleMaxNumber( extractDigits(str) );
    
    function argumentMustBe(type) {
        if (typeof str != type) {
            throw new TypeError('Argument must be a ' + type);
        }
    }
    
    function extractDigits(str) {
        var digits = str.match(/[1-9]/g);
        return digits ? digits.sort() : [];
    }
    
    function assembleMaxNumber(digits) {
        return (digits.length !== 0) ? generateMaxNumber(digits) : 0;
    }
    
    function generateMaxNumber(digits) {
        return trimMeaningless(digits.reverse().join('')) * 1;
    }
    
    function trimMeaningless(str) {
        return str.replace(/(\d)\1+/g, '$1');
    }
}

// очень простые тесты
TestCase('TestExtractMaxNumber', {
   'test should throw error argument not string': function() {
       assertException(invalidArg, 'TypeError');
       
       function invalidArg() {
           extractMaxNumber(null);
       }
   },
   'test should return number': function() {
       assertTrue(typeof extractMaxNumber('1992') == 'number');
   },
   'test should return zero if empty string': function() {
       assertEquals(extractMaxNumber(''), 0);
   },
   'test should return zero if string without digits': function() {
       assertEquals(extractMaxNumber('string'), 0);
   },
   'test should return ordered digits': function() {       
       assertEquals(98721, extractMaxNumber('9882string71820'));
   }
});

Последний раз редактировалось SlavaPav, 25.07.2011 в 02:21.
Ответить с цитированием