Когда использовать новую переменную против строковой интерполяции? - PullRequest
0 голосов
/ 28 марта 2012

Я написал скрипт, который решил реорганизовать, чтобы я мог добавить к нему функциональность, как думают мои коллеги. Я сохранил только четыре строки, но главное изменение - я удалил оба метода и сократил количество вызываемых переменных в пользу интерполяции / манипуляции со строками. Есть ли предпочтение этому? Лучше ли объявлять новую переменную просто для однократного использования, или это более СУХОЙ, чтобы просто внести незначительные изменения в строку, когда вам нужно ее использовать? Например вот оригинальный код:

def validate_directory(dir)
    puts "Enter the full directory path of the flv files." unless dir
    input =  dir || gets.chomp
    input.gsub!('\\', '/')
    input += '/' unless input[-1..-1] == '/'
    until File.directory?(input) && Dir.glob("#{input}*.flv") != []
        puts "That directory either doesn't exist or contains no .flv files. \nEnter the full directory path of the flv files."
        input = $stdin.gets.chomp
        input.gsub!('\\', '/')
        input += '/' unless input[-1..-1] == '/'
    end
    dir = input
end

def output(flv, location)
    title = flv.dup.gsub!(".flv", ".html")
    vid = flv.dup
    vid.slice!(0..6)
    body = $EMBED.gsub("sample.flv", vid) 
    htmlOutput = File.open(title, "w")
        htmlOutput.write(body)
    htmlOutput.close
    linkList = File.open("#{location}List of Links.txt", "a")
        linkList.write($BASE + vid.gsub(".flv", ".html") + "\n")
    linkList.close
    puts "Files created successfully."
end

dir = ARGV[0].dup unless ARGV.empty?        
folder = validate_directory(dir)            
files = folder.clone + "*.flv"              
flvs = Dir.glob("#{files}") 
File.delete("#{folder}List of Links.txt") if File.exists?("#{folder}List of Links.txt")
flvs.each { |flv| output(flv, folder) }

И новые вещи:

flash_folder = ARGV[0].dup unless ARGV.empty?

if !flash_folder
  puts "Enter the full directory path of the flv files."
  flash_folder = gets.chomp
end

flash_folder.gsub!('\\', '/')
flash_folder += '/' unless flash_folder[-1..-1] == '/'
until File.directory?(flash_folder) && Dir.glob("#{flash_folder}*.flv") != []
  puts "That directory either doesn't exist or contains no .flv files. \nEnter the full directory path of the flv files."
  flash_folder = $stdin.gets.chomp
  flash_folder.gsub!('\\', '/')
  flash_folder += '/' unless flash_folder[-1..-1] == '/'
end

flash_files = Dir.glob("#{flash_folder}*.flv")

File.delete("#{flash_folder}List of Links.txt") if File.exists?("#{flash_folder}List of Links.txt")

flash_files.each do |flv|
  html_output = File.open("#{flv.gsub(".flv", ".html")}", "w")
    html_output.write("#{embed_code.gsub("sample.flv", flv.slice(7..flv.length))}")
  html_output.close
  link_list = File.open("#{flash_folder}List of Links.txt", "a")
    link_list.write("#{flash_url}#{flv.slice(2..flv.length).gsub(".flv", ".html")}\n")
  link_list.close
end

puts "Finished."
...