Je suis un débutant étudiant les rails. Cela fait environ un mois que j'ai appris les rails. Alors que je voulais commencer à apprendre Ruby à partir de zéro, je suis arrivé à l'article suivant écrit par M. Ito, un programmeur Ruby.
Aujourd'hui, je vais me référer à cela et écrire sur le code que j'ai écrit et ce que j'y ai appris. Je voudrais continuer à me rafraîchir moi-même, mais je serais heureux si d'autres personnes pouvaient le voir et le signaler.
calender.rb
require 'Date'
#Méthode pour vérifier le dernier jour de ce mois
def last_day(year,month)
if month == 2 && Date.valid_date?(year,month,29)
return 29
elsif month == 2
return 28
elsif Date.valid_date?(year,month,31)
return 31
else
return 30
end
end
#Voir combien de semaines ce mois est
def how_many_weeks(day_array)
days_count = day_array.length
if days_count / 7 == 5 && days_count % 7 != 0
return 6
elsif days_count / 7 == 5
return 5
elsif days_count / 7 == 4 && days_count % 7 != 0
return 5
else
return 4
end
end
#Générer la date du jour
today = Date.today
#À partir de la date d'aujourd'hui/Mois/Moisの英字名を出力する
year = today.year
month = today.month
name_of_month = today.strftime("%B")
#Découvrez le jour de début du mois
day_of_the_week = Date.new(year,month,1).wday
#Créez un tableau de dates basé sur le dernier jour
last_day = last_day(year,month)
day_array = [*1..last_day]
#Ajouter un blanc au tableau pour chaque jour de début
day_of_the_week.times do
day_array.unshift(" ")
end
#Voir combien de semaines ce mois est
weeks_count = how_many_weeks(day_array)
#Créer un titre de calendrier
calender_title = name_of_month + " " + year.to_s
#Sortie de calendrier
puts calender_title.center(21," ")
printf("%3s%3s%3s%3s%3s%3s%3s\n","Su","Mo","Tu","We","Th","Fr","Sa","Su")
weeks_count.times do
#Défini sur une semaine de contenu d'une semaine
week = day_array.shift(7)
#En cas de contre-mesure en cas de zéro, laissez un blanc
if week.length < 7
e = week[6]
week.map {|e| e ? e : " " }
end
#Sortie d'une semaine
printf("%3s%3s%3s%3s%3s%3s%3s\n",
week[0],week[1],week[2],week[3],week[4],week[5],week[6])
end
Le résultat de sortie est le suivant ce mois-ci
August 2020
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
printf("%3s%3s%3s%3s%3s%3s%3s\n","Su","Mo","Tu","We","Th","Fr","Sa","Su")
Indique la sortie de la chaîne de caractères avec % s
Spécifiez le nombre de chiffres d'affichage avec «3» entre-temps
Il y a un saut de ligne au dernier \ n
.
En spécifiant le même format pour la partie en-tête et la date, j'ai pu l'organiser proprement.
Référence: Fonction d'entrée standard
puts calender_title.center(21," ")
Ici, nous traitons pour avoir "" (vide) inséré de sorte que les caractères soient au centre dans la plage de 21 qui est la taille de la partie du calendrier. C'est pratique!
Référence: String # center Ruby Reference
#Défini sur une semaine de contenu d'une semaine
week = day_array.shift(7)
#En cas de contre-mesure en cas de zéro, laissez un blanc
if week.length < 7
e = week[6]
week.map {|e| e ? e : " " }
end
if week.length < 7
Si le tableau semaine
avec la date de la semaine contient moins de 7 éléments
e = week[6]
En appelant la semaine [6], mettez nil dans toutes les parties qui n'ont aucune valeur.
week.map {|e| e ? e : " " }
À partir de là, utilisez map pour effectuer une formule ternaire (remplacez par "" (vide) dans le cas de nil) et remplacez nil.
Je pense qu'il y a un meilleur moyen, mais ... je voulais y arriver une fois, alors j'ai décidé de le faire.
Référence: Comment gérer nil de tableau et de valeur pour ne pas provoquer d'erreur dans ruby
Pour le moment, j'ai pu le faire très agréablement grâce à divers essais et erreurs. Comme mentionné dans le blog au début, je pense qu'il est important de réfléchir davantage et de rendre le code plus propre que de simplement le faire. Commençons par revoir le code de cette application de création de calendrier et écrire un test.
Encore une fois, merci à tous les sites pour votre référence!
Recommended Posts