Open3
学生エンジニアがTypeScriptを学ぶためにブルーベリー本を購入した話
ピン留めされたアイテム
こちらの記事からの派生になってます!
1章を終えて
導入、おもしろくてワクワクしながら読み進めていました。
静的型付け言語
についての説明があったり、
JavaScriptとTypeScriptの歴史
があったり...
感想としては、
この本で学べる概要を軽く説明することで、
「はやくその章まで行きたい!勉強したい。」といった感情を
抱かせていただくような1章でした。
2章を終えて
JavaScript.infoを事前に、軽く触れていたので
2章の内容については、知っていることばかりで出来るだけ深く読まずに、
軽く読ませていただきました。
最後のFizzBuzz問題について、いろいろな解法を学んだので
そちらのアウトプットをしてみます。
また、最近AtCoderを始めたのもあってか、
処理速度を気になり始めているので、処理速度を目安として記述しておきます。
(試行回数が少ないため、誤差ですが...)
最初に解いた案
0.56s
function generateFizzBuzz() {
for (let i = 1; i <= 100; i++) {
if (i % 3 === 0) {
if (i % 5 === 0) {
// 3かつ5の倍数
console.log("FizzBuzz");
} else {
// 3であり、5ではない
console.log("Fizz");
}
} else if (i % 5 === 0) {
// 3でなく、5である
console.log("Buzz");
} else {
console.log(i);
}
}
}
私が書いたものをCopilotに可読性向上をしてもらったもの
0.52s
function generateCopilotFizzBuzz() {
for (let i = 1; i <= 100; i++) {
let output = "";
// 3の倍数の場合、出力に'Fizz'を追加
if (i % 3 === 0) {
output += "Fizz";
}
// 5の倍数の場合、出力に'Buzz'を追加
if (i % 5 === 0) {
output += "Buzz";
}
// 数値が3または5の倍数でない場合、その数値を出力
if (output === "") {
output = i.toString();
}
console.log(output);
}
}
if文で統一することによって、非常にコードが見やすいです。
私「ねぇねぇ、Copilotくん。最適な解法を教えて!」
0.52s
function generateOptimizedFizzBuzz() {
for (let i = 1; i <= 100; i++) {
// 15の倍数の場合、出力は'FizzBuzz'
if (i % 15 === 0) {
console.log("FizzBuzz");
}
// 3の倍数の場合、出力は'Fizz'
else if (i % 3 === 0) {
console.log("Fizz");
}
// 5の倍数の場合、出力は'Buzz'
else if (i % 5 === 0) {
console.log("Buzz");
}
// 数値が3または5の倍数でない場合、その数値を出力
else {
console.log(i);
}
}
}
3と5の倍数
ということは、つまり3と5の最小公倍数である15
を判定すれば良いという判断ですね。
さすがです。
私「オブジェクトを使って、書いてみてよ!」
0.51s
function generateObjectFizzBuzz() {
// 出力を格納するオブジェクトを作成
const fizzBuzzMap: { [key: number]: string } = {};
// 1から100までの各数値に対応する出力を計算
for (let i = 1; i <= 100; i++) {
let output = "";
if (i % 3 === 0) {
output += "Fizz";
}
if (i % 5 === 0) {
output += "Buzz";
}
if (output === "") {
output = i.toString();
}
// 計算した出力をオブジェクトに格納
fizzBuzzMap[i] = output;
}
// オブジェクトから出力を取得して表示
for (let i = 1; i <= 100; i++) {
console.log(fizzBuzzMap[i]);
}
}
一推しです。
オブジェクトだいすき