<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>補講A モダンな書き方 on 2024年度 発展プログラミング演習（春学期）</title>
    <link>https://ksuap.github.io/2024spring/advanced01/index.html</link>
    <description>Recent content in 補講A モダンな書き方 on 2024年度 発展プログラミング演習（春学期）</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <lastBuildDate>Thu, 13 Apr 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ksuap.github.io/2024spring/advanced01/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Optional: nullを使わない</title>
      <link>https://ksuap.github.io/2024spring/advanced01/optional/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ksuap.github.io/2024spring/advanced01/optional/index.html</guid>
      <description>Optional: nullを使わない 背景 Optional 概要 作成 利用方法 あるディレクトリが保持するファイル・ディレクトリ一覧を取得する Optionalを利用しない場合 Optionalを利用する場合 参考資料 Stream: ループを使わない ラムダ式 $\lambda$ 練習問題 背景 クイックソートの考案者であるアントニー・ホーア（Antony Hoare）が 2009年の QCon London で null の発明は10億ドルにも相当する誤りであった と発言しています．
nullがあると，NullPointerException が発生する可能性があります． そもそも null を使わなければ，NullPointerException が発生することはありません．
近年のプログラミング言語では，nullを許容しない変数を定義することも可能です． 例えば，Kotlin では，次のプログラムの１行目のように，デフォルトでは null を代入するとコンパイルエラーとなります． null を代入するには，型名に ? を付け，null許容型として扱う必要があります．
var str1: String = null; // コンパイルエラー var str2: String? = null; // OKJavaではnullを許容しない変数は宣言できません． その代わりに　Optional という型を利用します．
Optional 概要 Optionalとは，nullかもしれない値を扱うためのラッパ型です． mapやifPresentメソッドなどで値が存在するときのみに処理を実行できます．
作成 String someString = // 文字列を代入する． Optional&amp;lt;String&amp;gt; optional = Optional.</description>
    </item>
    <item>
      <title>Stream: ループを使わない</title>
      <link>https://ksuap.github.io/2024spring/advanced01/stream/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ksuap.github.io/2024spring/advanced01/stream/index.html</guid>
      <description>Optional: nullを使わない Stream: ループを使わない 背景 Stream API Streamの利用方法 Streamの生成法 Streamでできること filter map forEach collect Map型のStream Streamの適用例 奇数一覧 総和を求める ArgsPrinter モンテカルロ法による $\pi$の計算 参考資料 ラムダ式 $\lambda$ 練習問題 背景 不吉な匂い（Code Smell）という，バグではないものの，バグの温床となり得る場所を指す言葉があります． リファクタリング 第二版 という本で，不吉な匂いにループが新たに追加されています． forやwhileなどのループはバグの温床になり得るので避けるべきと言われているのです． なぜなら，1行に書くべきことは1つと言われながらも，for文は1行に初期化式，継続条件，反復式の3つの式が存在しています． また，配列などの長さを超えてのアクセスは，インデックスで要素にアクセスしているために起こります．
Java 8 から Stream API と呼ばれるデータ処理を行うためのAPIが導入されており，これにより for などのループを置き換えることが可能になります． この Stream API とメソッド定義を簡略化して書けるラムダ式を用いることにより，より簡潔に分かりやすく書けるようになります． そして，この Stream API は Java だけでなく，昨今のプログラム言語で数多くサポートされています．
Stream API 第0講 基礎文法 例題で示した 1以上100未満の奇数一覧を出力するプログラムを例に挙げます．
元のプログラムのは次の通りです．
for(Integer i = 1; i &amp;lt; 100; i++){ // iを割った余りが1であれば，奇数． if(i % 2 == 1){ // i % 2 !</description>
    </item>
    <item>
      <title>ラムダ式</title>
      <link>https://ksuap.github.io/2024spring/advanced01/lambda/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ksuap.github.io/2024spring/advanced01/lambda/index.html</guid>
      <description>Optional: nullを使わない Stream: ループを使わない ラムダ式 $\lambda$ 概要 書き方 ラムダ式の書き方いろいろ 省略しない場合 引数の型を省略 引数の括弧を省略 メソッドの切り出し 波括弧とreturnの省略 参考資料 練習問題 概要 ラムダ式は，特定のメソッドを簡略化して書けるような文法で，Java 8から導入されました． 例えば，Strema API を用いて指定された数までの FizzBuzz を出力するプログラムを例に挙げて説明します． 以下のプログラムの runメソッドの filterメソッド，map メソッドに渡している v -&amp;gt; v % 2 == 1，i -&amp;gt; Integer.toString() がラムダ式と呼ばれる書き方です．
public class OddNumbersStream { void run(String[] args) { return IntStream.rangeClosed(1, 50) .filter(v -&amp;gt; v % 2 == 1) .mapToObj(number -&amp;gt; Integer.toString(number)) .collect(Collectors.joining(&amp;#34; &amp;#34;)); } public static void main(String[] args) { new OddNumbersStream().</description>
    </item>
    <item>
      <title>練習問題</title>
      <link>https://ksuap.github.io/2024spring/advanced01/assignments/index.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ksuap.github.io/2024spring/advanced01/assignments/index.html</guid>
      <description>Optional: nullを使わない Stream: ループを使わない ラムダ式 $\lambda$ 練習問題 1. nullチェック 2. 乱数値100個の統計（Stream） 1. nullチェック 与えられた String 型変数が null ならば空文字を返し， そうでなければその値そのものを返すメソッドpurifyNullを作成してください． ただし，purifyNullメソッド内ではif文やswitch文を使ってはいけません． クラス名は PurifyNullDemo としてください．
public class PurifyNullDemo { public void run() { demo(&amp;#34;string&amp;#34;); // &amp;#34;string&amp;#34; が出力される． demo(&amp;#34;null&amp;#34;); // &amp;#34;null&amp;#34; が出力される． demo(null); // &amp;#34;&amp;#34; が出力される． } void demo(String givenString) { String purifiedString = purifyNull(givenString); System.out.printf(&amp;#34;\&amp;#34;%s\&amp;#34; =&amp;gt; \&amp;#34;%s\&amp;#34;%n&amp;#34;, givenString, purifiedString); } String purifyNull(String givenString) { // if文を使わず givenString が null のときに空文字を返す． } }2.</description>
    </item>
  </channel>
</rss>