はじめに
この記事は「RUNTEQ Advent Calendar 2024」の 15 日目を担当しています。
今年のテーマは『プログラミングでの"ワクワク"』です。
私が『ワクワク』するときは学習経験のないプログラミング言語に初めて触れた時です。
今回の記事では私が触れたことのない言語の学習する際に心がけていることを語っていこうと思います。
前提
- メインとなる学習コンテンツについては特に言及しません。(書籍や動画、Web コンテンツなど)
- あくまで筆者個人の主観です、「この方法が一番!」というわけではございません。
- 学習効率や習熟度に関しては個人差があると思いますので、一つの意見として捉えていただければ幸いです。
一次情報のブックマーク
まず第一に信頼度の高い一次情報を取得できるサイト(公式ドキュメントやリファレンス)をブックマークしておきます。
私はプログラミング学習において一次情報の取得は不可欠だと考えています。
一次情報は読み慣れるまで時間がかかるものが多いので、見る習慣をつけることによって徐々に慣れていきましょう。
細かなアウトプット
天才などの一部の人を除いて、人類は一度書いただけでは覚えられません。
また覚えたことも反復しなければ忘れていきます。
私の場合は初めて使用するメソッドや概念、処理の流れなどを Notion にまとめています。
人の脳内ストレージには限りがあるので、インデックスだけを覚えておき中身はどこかに保存しておきましょう。
Notion などのデジタルでなくても情報がすぐに引き出せる状態であればなんでもよいと思います。
既存の知識との比較
私がよくやる方法の一つとして「この概念って〇〇だとどうしてたっけ?」という疑問を持つことです。
これをよく知る言語で例えることで、とても理解の助けになります。
そこで例として私が経験のある言語のうち、C 言語、Ruby、Java での NULL チェックを比較してみました。
C 言語 → Ruby → Java の順番で学習してきたので、その流れで説明していきます。
NULL チェックとは
そもそも NULL チェックとは何のためにするのでしょうか。
「関数やメソッドを安全に呼び出すため?」
「ヌルポインタへのアクセスを防ぐため?」
色々理由はあると思いますが、この記事では「 NULL
によって発生する例外を防ぐため」と仮定して進めていきます。
C 言語
if (name == NULL) {
printf("name は NULLです\n");
}
一番オーソドックスな NULL チェックの仕方ですね。
変数 name
が NULL
であるかを比較演算子で確かめています。
Ruby
if name.nil?
puts "name は nil です"
end
C 言語とは少し違いますね。
Ruby で扱える全ての値はオブジェクトなので NULL というものは存在しなく、代わりに nil
が存在します。
また全てのオブジェクトは自身が nil
かどうかをチェックしてくれる nil?
メソッドを使用できます。
ぼっち演算子
# name が nil の時、 NoMethodError が発生
puts name&.size
# name が nil の時、nil を返す
puts name&.size
Ruby では nil?
メソッド以外にもぼっち演算子というものがあります。
これはレシーバ(メソッドの呼び出し元)が nil
以外の場合はそのままメソッドを呼び出し、 nil
である場合は nil
を返してくれるといういものです。
こちらを使えば if
文で条件分岐することなく実装できそうですね。
Java
if (name == null) {
System.out.println("name は null です");
}
こちらは C 言語と似たような形ですね。
Optinal クラス
Optional<String> name = "ほげほげ";
// 値が存在しなければ例外をスローする
System.out.println(name.orElseThrow());
// 値が存在する場合のみ処理を実行する
name.ifPresent(n -> System.out.println(n + "は存在します"));
Java には null を安全に扱うための型として Optional
クラスが存在します。
サンプルコードの他にも Optional#isPresent
で値の存在チェックができたりもします。
このように NULL チェックの方法ひとつをとっても言語の特徴などによって様々な違いがありますが、「NULL チェック」という概念を一度学んでいると「この言語ではこんなやり方ができるんだ」と認識するだけで理解の促進に繋げることができると思います。
パッと思い浮かばない時は AI に例えていただくのもよいと思います。
おわりに
新しい技術を学ぶ際は「強くてニューゲーム」とまではいきませんが、今までの知識が役に立つことが大いにあると思います。
ぜひ今まで学んできた言語があれば、その言語との比較を行ってみてください。
これにより、リソースを言語特有の概念や仕組みに当てることができます。
また筆者は 1 月から実務で Python を使用するのでキャッチアップを楽しんでいきます!!