Code d'écriture Ruby

Quel est l'acte d'écrire du code avec ruby?

Il y a beaucoup de choses qui ne peuvent pas être vues simplement en lisant la méthode d'écriture rubis et la méthode de réflexion dans un livre et en le déplaçant pour le moment. Si vous avez une faible capacité de lecture pour lire le code des autres, vous serez coincé avec des expressions habituelles. De plus, si vous ne connaissez pas cette habitude, les gens qui y sont habitués peuvent être surpris par le code que vous avez écrit. La méthode de dénomination que j'ai écrite plus tôt en fait partie, mais cette fois, j'aimerais résumer ce que j'ai appris d'une manière différente.

Méthode de classe auto

Qu'est-ce qui est auto-écrit dans cette méthode de classe ... Vous ne pouvez pas appeler cette méthode sans l'écrire. Je parle de pourquoi. La première question que vous avez est. Si vous n'êtes pas habitué à l'orientation des objets en premier lieu, vous tomberez ici.

La réponse est de montrer la méthode de classe. Cette méthode fait du récepteur le nom de la classe. Voici comment écrire une méthode de classe comme vu dans le livre. Lors de l'appel, le nom de classe Greeter est utilisé comme récepteur et la méthode greet est appelée.

class_method.ruby


class Greeter
	class << self
		def greet
			puts "Bonsoir"
		end
	end
end

Greeter.greet

Voici comment écrire en utilisant soi-même comme un récepteur. Je pense que c'est la méthode de salutation de la classe elle-même. Au début, je n'ai vu que cela, donc je n'ai rien compris.

self.rb


class Greeter
	def self.greet
		puts "Bonsoir"
	end
end

Greeter.greet

La raison pour laquelle on la considère comme la méthode de salutation de la classe elle-même est qu'elle peut s'écrire comme suit. Vous pouvez également appeler la méthode greet en écrivant le nom de la classe directement comme un receveur au lieu de self.

class.rb


class Greeter
	def Greeter.greet
		puts "Bonsoir"
	end
end

Greeter.greet

Alors pourquoi utiliser self dans les méthodes de classe?

Il semble qu'il y ait deux points. Je décrirai la différence par rapport à la méthode d'instance à une date ultérieure.

Côté classe

J'ai vu du code utiliser également slef dans class_attribute dans les rails Active Support. Cela a également fonctionné même si je réécrivais la partie self dans la classe Firebase, il semble donc que cet attribut class_attribute soit également appelé et classé comme Classe # comme une lettre.

firebase.rb


class Firebase
  require 'google/cloud'

  class_attribute :contact
  self.contact = Google::Cloud.new(ENV['GOOGLE_PROJECT']).firestore
end

Le premier mouvement de logique est essentiel

Lors du tir de la balle à 45 degrés du haut à gauche vers le bas à droite sur le support de billard et en faisant une réflexion idéale sur le mur, quelles coordonnées et combien de pas la balle tombe-t-elle dans le trou d'angle?

Quand j'ai reçu le code pour la programmation de jeu comme un problème (j'ai réalisé plus tard qu'il s'agissait de programmation de jeu), je travaillais jusqu'à présent sur l'assemblage logique dans une boucle finie (par exemple, utilisateur d'un mois) Puisque le nombre de registrants est calculé, l'idée de ce type de logique de boucle infinie (comme vouloir boucler pour le nombre d'utilisateurs récupérés de la base de données) n'a pas surgi. En premier lieu, même les fondements de la logique de la pensée n'ont pas été abandonnés et ce problème ne pouvait être résolu tant que les réponses n'étaient pas concordantes.

billiard.rb


x_max = ARGV[0]
y_max = ARGV[1]

if !x_max || !y_max
  puts "Veuillez spécifier l'argument"
  exit 1
end

x_max =  x_max.to_i
y_max =  y_max.to_i

#Statut
x = 1
y = 1
step = 1
x_way = 1
y_way = 1

puts " #{step} (#{x},#{y})"
x += 1
y += 1
loop do
  step += 1
  puts " #{step} (#{x},#{y})"

  if y == 1 && x == x_max || x == 1 && y == y_max || x == 1 && y == 1 || x == x_max && y == y_max
    puts "GOAL!!"
    break
  elsif x == x_max
    x_way = -1
  elsif y == y_max
    y_way = -1
  elsif x == 1
    x_way = 1
  elsif y == 1
    y_way = 1
  end

  x += x_way
  y += y_way
end

Voici un résumé de ce que j'ai appris.

Gestion d'état

Le programme est le changement d'état des données à traiter. Pour concrétiser ce problème de billard,

Pensez à l'état à modifier et à ce qui est corrigé pour créer le code souhaité.

condition limite

Écrivez une expression conditionnelle et un processus qui donne un mouvement à l'état en déterminant ce qui déclenche le changement d'état ou la fin. Pour concrétiser ce problème de billard,

--Valeurs minimales et maximales dans les directions de l'axe x et de l'axe y sur les quatre murs

Cela signifie que. En supprimant cela, il est possible de déterminer quand l'état de déplacement de la balle change. C'est important lorsque l'on considère les expressions conditionnelles. Lors de l'exécution de la logique, tenez compte des conditions aux limites.

Corriger la boucle infinie

Boucles infinies dans la programmation

** Utilisez une boucle infinie pour ceux dont les conditions de terminaison sont visibles lors de l'exécution de la boucle. En d'autres termes, utilisez une boucle infinie en tirant parti de quelque chose dont vous ne connaissez pas clairement la condition de terminaison lors de l'écriture d'un programme. ** **

Le programme de jeu est exactement le mouvement du tiret de ce personnage dépend de l'entrée de l'utilisateur, il est donc nécessaire de boucler indéfiniment tant qu'il est entré.

L'utilisation dans une boucle infinie est également nécessaire pour DB. Lors du traitement d'une grande quantité de données dans une boucle, cela nécessite presque le même nombre de boucles qu'une boucle infinie, il est donc nécessaire de la concevoir de manière à ce qu'elle se termine lorsque certaines conditions sont remplies.

Impressions

En construisant la logique, je n'ai pas pu atteindre la tâche cette fois parce que je ne pouvais pas écrire le code en premier lieu, qu'il s'agisse d'une boucle finie ou d'une boucle qui continuait jusqu'à une certaine condition, mais infinie en tant que pensée importante. Je suis content d'avoir compris la boucle.

Recommended Posts

Code d'écriture Ruby
Écriture verticale rubis
Formater Ruby avec VS Code
Un mémorandum pour écrire un beau code
[Note] [Débutant] Comment écrire Ruby Memo (refactoring) 1
[Ruby] Tableau
Ruby apprentissage 5
Bases de Ruby
[Ruby on Rails] Vérification du code à l'aide de Rubocop-airbnb
Revue Ruby 2
Différences d'écriture en Ruby, PHP, Java, JS
Ajout de rubis
Ruby apprentissage 3
Paramètre Ruby 2
Problème de rubis ⑦
Ruby apprentissage 2
Code testable
Écrire du code à l'aide de classes et d'instances Ruby
Paramètres Ruby 1
Ruby apprentissage 1
Ruby Review 1
Jeu de code nostalgique, Ruby Warrior est bon
[Ruby] Code pour afficher le jour
Comment écrire du code qui pense Ruby orienté objet