Si vous voulez apprendre à générer des chaînes de nombres aléatoires & dans Ruby, vous êtes au bon endroit.
Parce que c’est exactement ce dont parle cet article!
Avec un nombre aléatoire, vous pouvez choisir un élément aléatoire dans un tableau, choisir un gagnant dans une liste, générer des jets de dés, etc.
Dans Ruby, il existe de nombreuses façons de générer des nombres aléatoires avec diverses propriétés.
Par exemple…
La méthode rand peut être utilisée de 3 manières:
- Sans arguments,
rand
vous donne un nombre à virgule flottante compris entre 0 & 1 (comme 0.4836732493) - Avec un argument entier (
rand(10)
) vous obtenez un nouvel entier compris entre 0 & ce nombre - Avec un argument range (
rand(1..20)
) vous obtenez un entier compris entre début de la plage & fin de la plage
D’autres façons de générer du caractère aléatoire dans Ruby incluent:
- La méthode Array#shuffle
- La méthode Array#sample
- La classe SecureRandom
Passons en revue quelques exemples !
Génération de nombres aléatoires
Vous pouvez générer des nombres aléatoires Ruby en utilisant la méthode rand:
Rand produit des nombres à virgule flottante (0.4836732493
) s’il est appelé sans aucun argument.
Vous pouvez passer un argument à rand
pour générer un nombre à partir de zéro jusqu’à (mais sans inclure) ce nombre.
rand 100> 41
La génération de nombres aléatoires Ruby est vraiment facile, mais que se passe-t-il si vous avez besoin que le nombre soit dans une plage spécifique au lieu de partir de zéro?
Pas de problème!
Vous pouvez utiliser une plage pour obtenir exactement ce dont vous avez besoin.
Exemple:
rand 200..500> 352
Nombres aléatoires Ruby sécurisés
Les nombres produits par rand peuvent suffire pour une application simple –
– mais si vous souhaitez les utiliser à des fins de sécurité — comme générer un jeton de réinitialisation de mot de passe — vous devez utiliser SecureRandom, qui fait partie de la bibliothèque standard Ruby.
SecureRandom extrait son générateur de /dev/urandom sur les systèmes Unix & sous Windows, il utilise l’API CryptAcquireContext/CryptGenRandom.
Voici un exemple:
require 'securerandom'SecureRandom.random_number> 0.232
Comme vous pouvez le voir, cela fonctionne beaucoup comme rand
, vous pouvez également passer un nombre maximum.
Exemple:
SecureRandom.random_number(100)> 72
SecureRandom a d’autres formats de sortie disponibles.
L’utilisation de hex
peut générer une chaîne hexadécimale de largeur fixe.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
Ruby 2.5 a introduit une nouvelle méthode, qui produit des chaînes alphanumériques aléatoires:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
Comment choisir des éléments aléatoires Dans des tableaux
Maintenant:
Vous voudrez peut-être obtenir un choix aléatoire dans une liste.
Vous pouvez essayer ceci:
.shuffle.first> 30
Mais Ruby a la méthode d’échantillonnage qui est mieux adaptée (et plus rapide) pour cette tâche:
.sample> 5
Vous pouvez utiliser un exemple pour les plages, ce code génère une lettre aléatoire:
('a'..'z').to_a.sample> b
Vous pouvez passer un argument entier à sample pour obtenir n éléments uniques du tableau:
.sample(2)>
Il est également possible de passer un générateur aléatoire personnalisé en argument:
.sample(random: SecureRandom)
Chaînes aléatoires Ruby
L’application de caractère aléatoire ultime consiste à générer une chaîne aléatoire avec un jeu de caractères personnalisé. Voici le code:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
Il se passe quelques choses ici.
Tout d’abord, nous préparons notre jeu de caractères en utilisant des plages et en les convertissant en tableaux. Ensuite, nous profitons de l’appel Array.new
avec un bloc, ce qui nous permet d’initialiser un tableau de taille n avec les valeurs produites par le bloc.
Ce code produira des chaînes de la forme suivante : TufwGfXZskHlPcYrLNKg
.
Vous pouvez modifier le jeu de caractères en fonction de vos besoins.
Ensemencement du Générateur de nombres aléatoires
Si vous souhaitez contrôler les nombres générés lors de l’utilisation d’une méthode comme rand
, vous pouvez définir la graine.
Quelle est la graine?
La graine est un nombre qui commence une séquence de nombres aléatoires.
Tous les nombres générés sont dérivés de cette graine.
C’est pourquoi la qualité de la graine est généralement la clé pour produire une bonne séquence de nombres aléatoires.
Ruby s’en occupe déjà pour vous (utilisez SecureRandom
si vous avez besoin d’une sécurité supplémentaire), mais dans certains scénarios (testant principalement le débogage &), vous voudrez peut-être définir cette graine vous-même.
Vous pouvez le faire avec la méthode srand
.
Kernel.srand(1)
Avec cette graine, vous saurez exactement quels nombres le générateur va vous donner.
Pour le numéro 1 comme graine:
Array.new(5) { rand(1..10) }#
Si vous réglez à nouveau la graine sur 1, la séquence commencera à 6, puis 9, 10, etc.
Conclusion
C’est tout! Vous êtes maintenant prêt à commencer à utiliser le hasard dans vos programmes Ruby 🙂
Cet article vous a-t-il été utile?
Partagez-le avec vos amis & abonnez-vous à ma newsletter pour ne rien manquer de nouveau !