Ich bin ein Anfänger, der Rails studiert. Es ist ungefähr einen Monat her, seit ich zum ersten Mal Schienen gelernt habe. Während ich Ruby von Grund auf lernen wollte, kam ich zu dem folgenden Artikel von Mr. Ito, einem Ruby-Programmierer.
Heute werde ich mich darauf beziehen und über den Code schreiben, den ich geschrieben habe und was ich darin gelernt habe. Ich würde gerne weiter alleine auffrischen, aber ich würde mich freuen, wenn andere Leute es sehen und darauf hinweisen könnten.
calender.rb
require 'Date'
#Methode zum Überprüfen des letzten Tages dieses Monats
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
#Sehen Sie, wie viele Wochen dieser Monat ist
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
#Generieren Sie das heutige Datum
today = Date.today
#Ab dem heutigen Datum/Mond/Mondの英字名を出力する
year = today.year
month = today.month
name_of_month = today.strftime("%B")
#Finden Sie den Starttag des Monats heraus
day_of_the_week = Date.new(year,month,1).wday
#Erstellen Sie eine Reihe von Daten basierend auf dem letzten Tag
last_day = last_day(year,month)
day_array = [*1..last_day]
#Fügen Sie dem Array für jeden Starttag ein Leerzeichen hinzu
day_of_the_week.times do
day_array.unshift(" ")
end
#Sehen Sie, wie viele Wochen dieser Monat ist
weeks_count = how_many_weeks(day_array)
#Kalendertitel erstellen
calender_title = name_of_month + " " + year.to_s
#Kalenderausgabe
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
#Stellen Sie die Inhaltswoche einer Woche ein
week = day_array.shift(7)
#Lassen Sie als Gegenmaßnahme bei Null ein Leerzeichen
if week.length < 7
e = week[6]
week.map {|e| e ? e : " " }
end
#Ausgabe im Wert von einer Woche
printf("%3s%3s%3s%3s%3s%3s%3s\n",
week[0],week[1],week[2],week[3],week[4],week[5],week[6])
end
Das Ausgabeergebnis ist in diesem Monat wie folgt
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")
Zeigt die Ausgabe der Zeichenfolge mit% s an
Geben Sie in der Zwischenzeit die Anzahl der Anzeigestellen mit "3" an
Am letzten \ n
gibt es einen Zeilenumbruch.
Durch die Angabe des gleichen Formats für den Kopfteil und das Datum konnte ich es ordentlich anordnen.
Referenz: Standardeingabefunktion
puts calender_title.center(21," ")
Hier wird "" (leer) eingefügt, sodass die Zeichen in der Mitte innerhalb des Bereichs von 21 liegen, der der Größe des Kalenderteils entspricht. Es ist bequem!
Referenz: String # center Ruby Reference
#Stellen Sie die Inhaltswoche einer Woche ein
week = day_array.shift(7)
#Lassen Sie als Gegenmaßnahme bei Null ein Leerzeichen
if week.length < 7
e = week[6]
week.map {|e| e ? e : " " }
end
if week.length < 7
Wenn das Array "Woche" mit dem Datum der Woche weniger als 7 Elemente enthält
e = week[6]
Wenn Sie Woche [6] aufrufen, geben Sie in allen Teilen, die keinen Wert haben, Null ein.
week.map {|e| e ? e : " " }
Verwenden Sie von dort aus map, um eine ternäre Formel auszuführen (im Fall von nil durch "" (leer) ersetzen) und nil zu ersetzen.
Ich denke, es gibt einen besseren Weg, aber ... ich wollte es einmal schaffen, also habe ich mich dazu entschlossen.
Referenz: Verwalten von Null von Array und Wert, um keinen Fehler in Ruby zu verursachen
Vorläufig konnte ich es durch verschiedene Versuche und Irrtümer sehr angenehm machen. Wie im Blog am Anfang geschrieben, denke ich, dass es wichtig ist, mehr nachzudenken und den Code sauberer zu machen, nicht nur, um ihn zu machen. Beginnen wir damit, den Code dieser Kalendererstellungs-App erneut zu überprüfen und einen Test zu schreiben.
Nochmals vielen Dank an alle Websites für Ihre Referenz!
Recommended Posts