Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В стандартном методе crypt применяется стандартная функция с тем же именем для шифрования строки по алгоритму DES. Она принимает в качестве параметра «затравку» (ее назначение то же, что у затравки генератора случайных чисел). На платформах, отличных от UNIX, параметр может быть иным.
Ниже показано тривиальное приложение, которое запрашивает пароль, знакомый любителям Толкиена:
coded = "hfCghHIE5LAM."puts "Говори, друг, и жми Enter!"print "Пароль: " password = gets.chopif password.crypt("hf") == coded puts "Добро пожаловать!"else puts "Кто ты, орк?"endСтоит отметить, что на такое шифрование не стоит полагаться в серверных Web-приложениях, поскольку пароль, введенный в поле формы, все равно передаётся по сети в открытом виде. В таких случаях проще всего воспользоваться протоколом SSL (Secure Sockets Layer). Разумеется, никто не запрещает пользоваться шифрованием на сервере, но по другой причине — чтобы защитить пароль в хранилище, а не во время передачи по сети.
2.27. Сжатие строк
Для сжатия строк и файлов применяется библиотека Zlib.
Зачем может понадобиться сжимать строки? Возможно, чтобы ускорить ввод/вывод из базы данных, оптимизировать использование сети или усложнить распознавание строк.
В классах
DeflateInflatedeflateinflatedeflateBEST_COMPRESSIONBEST_SPEEDDEFAULT_COMPRESSIONrequire 'zlib'include Zliblong_string = ("abcde"*71 + "defghi"*79 + "ghijkl"*113)*371# long_string состоит из 559097 символов.s1 = Deflate.deflate(long_string,BEST_SPEED) # 4188 символов.s3 = Deflate.deflate(long_string) # 3568 символовs2 = Deflate.deflate(long_string,BEST_COMPRESSION) # 2120 символовНеформальные эксперименты показывают, что скорость отличается примерно в два раза, а плотность сжатия — в обратной пропорции на ту же величину. И скорость, и плотность сильно зависят от состава строки. Разумеется, на скорость влияет и имеющееся оборудование.
Имейте в виду, что существует пороговое значение длины строки. Если строка короче, то сжимать ее практически бесполезно (если только вы не хотите сделать ее нечитаемой). В этом случае неизбежные накладные расходы могут даже привести к тому, что сжатая строка окажется длиннее исходной.
2.28. Подсчет числа символов в строке
Метод
counts1 = "abracadabra"a = s1.count("с") # 1b = s1.count("bdr") # 5Строковый параметр ведет себя как простое регулярное выражение. Если он начинается с символа
^c = s1.count("^а") # 6d = s1.count ("^bdr") # 6Дефис обозначает диапазон символов:
e = s1.count("a-d") # 9f = s1.count("^a-d") # 22.29. Обращение строки
Для обращения строки служит метод
reversereverse!s1 = "Star Trek"s2 = s1.reverse # "kerT ratS"si.reverse! # si теперь равно "kerT ratS"Пусть требуется обратить порядок слов (а не символов). Тогда можно сначала воспользоваться методом
String#splitArrayreversejoinphrase = "Now here's a sentence"phrase.split(" ").reverse.join(" ")# "sentence a here's Now"2.30. Удаление дубликатов
Цепочки повторяющихся символов можно сжать до одного методом
squeezes1 = "bookkeeper"s2 = s1.squeeze # "bokeper"s3 = "Hello..."s4 = s3.squeeze # "Helo."Если указан параметр, то будут удаляться только дубликаты заданных в нем символов:
s5 = s3.squeeze(".") # "Hello."Этот параметр подчиняется тем же правилам, что и параметр метода
count^squeeze!2.31. Удаление заданных символов
Метод
deletes1 = "To be, or not to be"s2 = s1.delete("b") # "To e, or not to e"s3 = "Veni, vidi, vici!"s4 = s3.delete(",!") # "Veni vidi vici"
