История изменений
Исправление 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
,foobar
); - в случае ошибки запись в stderr и возврат подходящего кода;
- использование криптографически секьюрного генератора псевдослучайных чисел.
Но в любом случае особой разницы нет, так как это хэллоуворлд. И для большинства современных ЯП реализация будет сопоставимая.
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
,foobar
); - в случае ошибки запись в stderr и возврат подходящего кода;
- использование криптографически секьюрного генератора псевдослучайных чисел.
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)