LINUX.ORG.RU

История изменений

Исправление theNamelessOne, (текущая версия) :

Ну так себе аргумент — хэллоуворлды почти на всех современных ЯП писать легко и приятно, особенно скриптовых. Вот тебе для сравнения Elixir:

#!/usr/bin/env elixir

with [len] <- System.argv(),
     {len, ""} when len > 0 <- Integer.parse(len) do
  len
  |> :crypto.strong_rand_bytes()
  |> Base.url_encode64(padding: false)
  |> binary_part(0, len)
  |> IO.puts()

  System.stop()
else
  argv when is_list(argv) ->
    IO.puts(:stderr, "Usage: ./gen.exs LEN")

  _ ->
    IO.puts(:stderr, "Invalid length!")
end

System.stop(1)

Кода чуть меньше, зато есть:

  1. обработка невалидных аргументов командной строки (попробуй вызвать свой скрипт со следующими аргументами, например: -1, foobar);
  2. в случае ошибки запись в stderr и возврат подходящего кода;
  3. использование криптографически секьюрного генератора псевдослучайных чисел.

Но в любом случае особой разницы нет, так как это хэллоуворлд. И для большинства современных ЯП реализация будет сопоставимая.

PS. Это сильно неидиоматический Ruby-код:

def get(len) 
  pass = ""
  len.times do 
    pass += symbol
  end
  pass
end

Лучше так:

def get(len) = len.times.collect { symbol }.join

Или вообще

require 'securerandom'
def get(len) = SecureRandom.alphanumeric(len)

Исходная версия theNamelessOne, :

Ну так себе аргумент — хэллоуворлды почти на всех современных ЯП писать легко и приятно, особенно скриптовых. Вот тебе для сравнения Elixir:

#!/usr/bin/env elixir

with [len] <- System.argv(),
     {len, ""} when len > 0 <- Integer.parse(len) do
  len
  |> :crypto.strong_rand_bytes()
  |> Base.url_encode64(padding: false)
  |> binary_part(0, len)
  |> IO.puts()

  System.stop()
else
  argv when is_list(argv) ->
    IO.puts(:stderr, "Usage: ./gen.exs LEN")

  _ ->
    IO.puts(:stderr, "Invalid length!")
end

System.stop(1)

Кода чуть меньше, зато есть:

  1. обработка невалидных аргументов командной строки (попробуй вызвать свой скрипт со следующими аргументами, например: -1, foobar);
  2. в случае ошибки запись в stderr и возврат подходящего кода;
  3. использование криптографически секьюрного генератора псевдослучайных чисел.

PS. Это сильно неидиоматический Ruby-код:

def get(len) 
  pass = ""
  len.times do 
    pass += symbol
  end
  pass
end

Лучше так:

def get(len) = len.times.collect { symbol }.join

Или вообще

require 'securerandom'
def get(len) = SecureRandom.alphanumeric(len)