[RUBY] Ordre de traitement dans le programme

La période d'étude est maintenant dans la 11e semaine. Voici un retour sur ce que j'ai appris et ce que je fais souvent des erreurs.

Cette fois, c'est "l'ordre de traitement". Bien qu'il s'agisse d'un contenu basique et rudimentaire dans les bases, il existe de nombreux cas où une erreur s'est produite en raison d'un mauvais ordre de description, j'espère donc que cela sera utile pour ceux qui commencent tout juste à apprendre. De plus, comme la langue que nous apprenons actuellement est "Ruby", le contenu sera également celui de "Ruby".

La version de ruby utilisée est la suivante.

ruby 2.6.5

À propos de l'ordre de traitement

Tout d'abord, l'ordre de traitement du programme dans la source est essentiellement ** "dans l'ordre de haut en bas, ligne par ligne" *. Cela ne change pas même si vous créez une application en utilisant une description compliquée ou Ruby on Rails. ( Lors de l'appel d'une méthode, d'un branchement conditionnel ou d'un traitement répété, la ligne peut sauter de bas en haut, mais elle sera plus facile à comprendre si vous connaissez l'ordre de traitement de base.) Exprimé dans un programme simple

puts "1ère ligne"
puts "2e ligne"
puts "3e ligne"

Si vous écrivez, lorsque vous l'exécutez sur la console

1ère ligne
2e ligne
3e ligne

Ce sera. Avec cette description, le résultat de sortie du programme met "3ème ligne" ne viendra pas à la 1ère ligne. Ce serait dur s'il y en avait. Si le branchement conditionnel (if, while, etc.) ou le traitement répétitif (temps, chacun, etc.) chevauche cela, l'ordre de traitement a tendance à être bâclé. (Peut-être que je suis le seul ...)

Par exemple, prenez le fameux ** "FizzBuzz Problem" ** comme exemple.


Problème FizzBuzz
 1~Créez un programme qui génère le nombre 100.
Lorsqu'il s'agit d'un multiple de 3, il s'affiche sous la forme "Fizz", et lorsqu'il est un multiple de 5, il s'affiche sous la forme "Buzz".
Créez un programme à afficher.
Cependant, lorsqu'il s'agit d'un multiple de 15, affichez "Fizz Buzz".

Un exemple de cette réponse est

#Code correct
def fizz_buzz
  num = 0
  while num <= 99
    num += 1
    if num % 15 == 0 
    puts "FizzBuzz"
    elsif num % 3 == 0
    puts "Fizz"
    elsif num % 5 == 0
    puts "Buzz"
    else
    puts num
    end
  end
end

puts fizz_buzz

Le résultat de sortie est le suivant

スクリーンショット 2020-09-28 10.56.51.png

Modifions l'ordre des expressions conditionnelles dans ce programme comme suit.

#Mauvais code

def fizz_buzz
  num = 0
  while num <= 99
    num += 1
    if num % 3 == 0  # num % 15 ==Changé de l'expression conditionnelle de 0
    puts "Fizz"
    elsif num % 5 == 0
    puts "Buzz"
    elsif num % 15 == 0 #num % 3 ==Changé de l'expression conditionnelle de 0
    puts "FizzBuzz"
    else
    puts num
    end
  end
end

puts fizz_buzz

Voici le résultat de sortie décrit comme ci-dessus.

スクリーンショット 2020-09-28 11.07.44.png

Lorsqu'il s'agit d'un multiple de 15, "FizzBuzz" n'est pas affiché mais "Fizz" est affiché. La raison en est "Je ne comprends pas l'ordre de traitement des programmes".

Compte tenu de l'ordre de traitement du mauvais code ci-dessus Par exemple, si num == 3,

#Mauvais code
    if num % 3 == 0  #Cette formule s'applique
    puts "Fizz"

=> "Fizz"

Lorsque num == 5

#Mauvais code
    if num % 3 == 0  # num ==5 n'est pas divisible par 3, alors procédez comme suit
    puts "Fizz"
    elsif num % 5 == 0 # num ==5 est divisible par 5, alors faites-le
    puts "Buzz"

=> "Buzz"

Si le problème num == 15

#Mauvais code
    if num % 3 == 0  # num ==15 est divisible par 3, alors faites-le!
    puts "Fizz"
    elsif num % 5 == 0 # num ==15 a été traité et ne fonctionne plus.
    puts "Buzz"
    elsif num % 15 == 0 # num ==15 a été traité et ne fonctionne plus.
    puts "FizzBuzz"
    end

=> "Fizz"

Il sera traité comme ceci. Faites donc attention à l'ordre dans lequel vous écrivez le programme.


if num % 15 == 0 #Premièrement, il est déterminé si num est divisible par 15.
    puts "FizzBuzz" #Si l'expression conditionnelle est vraie"FizzBuzz"Si l'affichage ne s'applique pas, passez à la suivante

  elsif num % 3 == 0 #Ensuite, jugez s'il est divisible par 3 mais non divisible par 15.
    puts "Fizz"      #Si l'expression conditionnelle est vraie"Fizz"Est affiché.
                     #Si cela ne s'applique pas non plus, passez à la suivante

  elsif num % 5 == 0 #Il n'est pas divisible par 3 ou 15, mais on juge s'il est divisible par 5.
    puts "Buzz"      #Si l'expression conditionnelle est vraie"Buzz"Est affiché.
                     #Si cela ne s'applique pas non plus, passez à la suivante
  else
 
   puts num         #Si toutes les conditions précédentes ne sont pas remplies
end                 #Afficher num tel quel

c'est tout. C'est une chose basique, mais d'après mon expérience jusqu'à présent, il y a eu des situations où j'ai eu des problèmes parce que je n'avais pas une solide compréhension de ces bases, donc si vous faites face à une situation similaire, j'apprécierais que vous puissiez vous y référer.

Recommended Posts

Ordre de traitement dans le programme
[Order method] Définit l'ordre des données dans Rails
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets
Traitement d'image: structure de base de l'image lue par le programme
Explication de l'ordre des itinéraires ferroviaires
Implémentation du traitement asynchrone dans Tomcat
Un programme qui compte le nombre de mots dans une liste
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Android - L'ordre du traitement série et du traitement parallèle d'AsyncTask est-il garanti? ??
La validation de printemps était importante dans l'ordre de Form et BindingResult
Obtenez le résultat de POST en Java
L'identité des paramètres de rails [: id]
Implémentation du traitement asynchrone compatible multi-tenant dans Tomcat
J'ai étudié le traitement interne de Retrofit
L'histoire de l'écriture de Java dans Emacs
Ecrire le mouvement de Rakefile dans le runbook
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
[N ° 004] Correction de l'écran de la liste des commandes du client
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
A propos de l'ordre de description des propriétés système Java
L'ordre des modificateurs de méthode Java est fixe
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
Ressentez le passage du temps même à Java
Ordre des modificateurs utilisés dans Swift (voir SwiftLint)
Importer des fichiers de la même hiérarchie en Java
[Rails] Classement et pagination par J'aime
Création d'un exemple de programme en utilisant le problème d'un spécialiste des bases de données dans DDD Improvement 2
[Swift] Comment changer l'ordre des éléments de barre dans le contrôleur de barre d'onglets [Débutant]
Création d'un exemple de programme en utilisant le problème d'un spécialiste des bases de données avec DDD Improvement 1
Obtenez l'URL de la destination de la redirection HTTP en Java
Spécifiez le codage des ressources statiques dans Spring Boot
Le monde de Clara-Rules (2)
Dans Time.strptime,% j (date totale de l'année) est
Mécanisme de plug-in simple dans Spring, considérez également l'ordre
Préparer l'environnement d'exécution de Tomcat dans IntelliJ Community
Accédez au fichier war dans le répertoire racine de Tomcat
Implémentation du traitement asynchrone pour un seul locataire dans Tomcat
[Ruby] Le rôle des indices dans l'apprentissage des éléments dans les tableaux
Obtenez le nom du scénario de test dans la classe de test JUnit
Comprendre les caractéristiques de Scala en 5 minutes (Introduction à Scala)
Jugement du calendrier
L'histoire d'une exception d'état illégale dans Jetty.
Le monde de Clara-Rules (4)
Examinez les limites du "mur de mémoire de 32 Go" dans Elasticsearch
Le monde de Clara-Rules (3)
À propos de l'ajout de variables dans le traitement itératif dans l'instruction while
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Les objets de la liste étaient des références, non? Confirmation de
Résumé personnel des types souvent utilisés dans JUnit 4
Utiliser MouseListener avec le traitement
Le monde de Clara-Rules (5)
L'idée du tri rapide