2023年 5月 の投稿一覧

【Java】匿名クラス(無名クラス)を使いこなそう! 匿名クラスの使い方と利点を解説!

今回は、Javaの匿名クラス(無名クラス)について解説します。

匿名クラスとは

匿名クラスを使うと、新しくクラスを記述せずともあるインターフェースや抽象クラスを実装し、インスタンスとして扱うことができます。語弊を恐れずに簡単に言うと、「使い捨てクラス」のようなものです。

C#の匿名型とは全く異なるものです。

匿名クラスの例

Java
public abstract class SuperClass { // 抽象クラス
    public void sayHello() {
        System.out.println("こんにちは!");
    }
    
    public abstract void abstractMethod(); // 抽象メソッド
}
Java
import..

public class Program {
    public static void main(String[] args) {
        SuperClass anonymous = new SuperClass() {
            @Override
            public void abstractMethod() { // 抽象メソッドのオーバーライド
                System.out.println("ハロー!");
            }
        };
        
        anonymous.sayHello(); // 「こんにちは」と出力される
        anonymous.abstractMethod(); // 「ハロー!」と出力される
    }
}
[実行結果]

こんにちは!
ハロー!

この例では、抽象クラス SuperClassを実装する匿名クラスを作成しています。匿名クラス内でスーパークラスの抽象メソッドabstractMethod()をオーバーライドしています。

匿名クラスの利点

匿名クラスを利用しない場合と比較

もし匿名クラスを利用しない場合、次のような新しいクラスを実装する必要があります。

Java
import..

public class DerivedClass extends SuperClass {
    @Override
    public void abstractMethod() {
        System.out.println("ハロー!");
    }
}

一度しか使わないようなインターフェースや抽象クラスの実装は、匿名クラスを利用することでより簡潔に書くことができます。

SuperClassは先ほど示したものと同じです。

同じスコープ内の変数を利用することができる

匿名クラスを利用することの利点として、「匿名クラスの実装の中であっても同じスコープ内の変数を利用することができる」があります。

サンプルコード:

Java
import..

public class Program {
    public static void main(String[] args) {
        String myMessage = "釧路はええとこやで〜";
        
        new SuperClass() {
            @Override
            public void abstractMethod() {
                System.out.println(myMessage); // 同じスコープ内の変数myMessageを利用することができる
            }
        }.abstractMethod();
    }
}
[実行結果]

釧路はええとこやで〜

SuperClassは先ほど示したものと同じです。

備考

普通のクラスの継承で匿名クラスを扱う

当然、インターフェースや抽象クラスでなくても匿名クラスを作成することが出来ます

サンプルコード:

Java
public class People {
    public void sayHello() {
        System.out.println("Hello");
    }
}
Java
import..

public class Program {
    public static void main(String[] args) {
        var people = new People(); // 普通のPeopleクラスのインスタンス
        
        var japanesePeople = new People() {
            @Override
            public void sayHello() {
                System.out.println("こんにちは");
            }
        };
        
        var chinesePeople = new People() {
            @Override
            public void sayHello() {
                System.out.println("你好");
            }
        };
        
        var hogePeople = new People() {
            @Override
            public void sayHello() {
                super.sayHello(); // 匿名クラス内でもsuperキーワードを利用できる
            }
        };
        
        people.sayHello(); // -> Hello
        japanesePeople.sayHello(); // -> こんにちは
        chinesePeople.sayHello(); // -> 你好
        hogePeople.sayHello(); // -> Hello
    }
}
[実行結果]

Hello
こんにちは
你好
Hello

この例では、クラスPeopleを継承した匿名クラスを作り、インスタンスjapanesePeoplechinesePeoplehogePeopleを作成しました。

まとめ

今回は、Javaの匿名クラス(無名クラス)について説明しました。例のように、適切な箇所で匿名クラスを利用すると、普通にクラスを実装するよりも簡潔に記述することが出来ます。特に、そのクラスを一度しか使わない場合は、匿名クラスに書き換えるとよりコードがスッキリします。

最後までお読みいただきありがとうございました!

【高校数学Ⅰ】2次関数のグラフをマスターしよう!

今回から高校数学の中で最初の難関でもある二次関数について解説していきます!基礎から応用まで幅広く扱っていく予定なので数学で苦手な分野がある時や、数学力を高めたい時に是非ご覧ください。

関数とは?

ある変数$\ x\ $があるとき,この$\ x\ $を関数という箱にいれると$\ y \ $の値がただ1つに決まる時$\ y\ $は$\ x\ $の関数といいます。関数は$\ f(x)\ $ と表し,ある関数$\ f\ $ に$\ x\ $を代入していることを表しています。下図のようなイメージですね。

              $x$➡︎$f$という関数➡︎$f(x)$として値が出てくる

また関数$ y=f(x) $において$ x=a $のときの$ y $の値を$ f(a) $と表します。
例えば$ f(x)=x+3 $のとき$ x=2 $のときの$ y $の値は$ f(2)=2+3=5 $といった具合です。

象限

座標平面には$ x$軸と$ y$軸の2つの軸があります。この2つの$ x$軸と$ y$軸で平面が4つに分割されるとき,この分割された4つの領域を第1象限から第4象限までで分類します。どこが題2象限であるか〜などは覚える必要があります。下図のようになるので覚えましょう。また$ x軸$や$ y$軸上の点はどの象限にも含まれないので注意しましょう。

2次関数のグラフ・軸・頂点

2次関数のグラフは放物線と呼ばれ, $y=ax^2+bx+c$ (一般形)の形で表されます($a≠0$)。
また放物線に関わる重要な言葉として,軸と頂点があります。
とは…放物線はある直線を境に線対称な図形になっています。この直線を軸といいます。
頂点とは…放物線とその軸の交点のことを頂点といいます。

2次関数の形は $a$ の値により大きく変わります。

(1) $a>0$ のとき,
  放物線のグラフは下に尖った形となり,これを下に凸(したにとつ)と呼びます。

(2) $a<0$ のとき,
  放物線のグラフは上に尖った形となり,これを上に凸(うえにとつ)と呼びます。

$y=a(x-p)^2+q$(標準形)のグラフと平方完成

$y=ax^2+bx+c$ の表記ではグラフをかくことは難しいです。しかし,グラフの頂点と軸が分かればグラフの概形をかくことができます。2次関数を $y=a(x-p)^2+q$(標準形) の形に変形することでグラフの頂点と軸を知ることができます(理由は後程説明)。この変形を平方完成といいます。

・平方完成のやり方
$y=ax^2+bx+c$

$=a(x^2+\frac{b}{a}x)+c$

$=a{(x+\frac{b}{2a})^2-(\frac{a}{2b})^2}+c$

$=a(x+\frac{a}{2b})^2-\frac{b^2}{4a}+c$

ここで,$p=-\frac{a}{2b} , q=-\frac{b^2}{4a}+c$ とおくと

$y=a(x-p)^2+q$ を得る。■

平方完成は慣れなので数を沢山こなしましょう。

・標準形から軸と頂点を求める。

$y=a(x-p)^2+q ⇔ y-q=a(x-p)^2$ は $y=ax^2$ の $x$ を $x-p$,$y$ を $y-q$ に置き換えた形をしています。この変換は $y=ax^2$ のグラフを $x$ 軸方向に $p$ ,$y$ 軸方向に $q$ だけ平行移動させたグラフを表しています。

$y=ax^2$ の軸は $x=0$ なので,$x$ 軸方向に $p$ 平行移動させた $y=a(x-p)^2+q$ の軸は $x=p$
同様に,$y=ax^2$ の頂点は $(0,0)$ なので,$x$ 軸方向に $p$ $y$ 軸方向に $q$ 平行移動させた $y=a(x-p)^2+q$ 頂点の座標は$(p,q)$ となります。

$y=a(x-p)^2+q$の2次関数の軸は$x=p$,頂点の座標は$(p,q)$

定義域・値域・最大値・最小値

関数 $y=f(x)$ において,$x$ の取りうる範囲を定義域,そのときの $y$ の取りうる範囲を値域といいます。また,値域のうち最も大きい値があるとき,その値を最大値,逆に値域のうち最も小さな値があるとき,その値を最小値と言います。

〈例1〉 $y=2x$ の定義域が$ -1<x≦3 $のときの値域・最大値・最小値は?

$y=2x$ は直線を表すので,端点を考えると値域は $-2<y≦6$ となります。
よって最大値は6となります。一方最小値は,値域の不等式に左側に等号(=)が含まれないので最小値はありません。

〈例2〉

$y=x^2+2x$ の定義域が $x≦1$ のときの値域・最大値・最小値は?

2次関数なのでグラフの形を考えましょう。平方完成すると $y=(x+1)^2-1$ となり,軸は $x=-1$ ,頂点は$ (-1,-1)$ であることがわかります。グラフをかくと,最小値は $x=0$ のとき$0 $ですが,$ x $の定義域が負の方向に無限に続くので最大値は存在しません。

〈例3〉

$y=-x^2+4x+1$ の定義域が $-1≦x≦4$ のときの最大値と最小値は?

これも2次関数なので平方完成すると,$y=-(x-2)^2+2$ となり頂点の座標が$ (2,2)$ とわかります。 $x^2$ の係数が負であるので上に凸であることに注意すると,グラフは以下のようになります。よって最大値は $x=2$ のとき$2$,最小値は $x=-1$ のとき $-7$ となります。

第1回は2次関数の基本事項について整理しました。次回からは2次関数の頻出問題や応用問題の解説をしていきますのでよろしくお願いします。なお,記事に誤りがありましたらご気軽にコメントください。最後に練習問題を載せておきますので力試しにどうぞ!

【練習問題】$a$ を実数とする。$y=ax^2+2ax+a^2+a$ の最大値が $4$ のとき,$a$ の値を求めよ。

以下解答⇩

平方完成すると,$y=a(x+1)^2+a^2$ で定義域が実数全体の放物線の最大値が存在するのは放物線が上に凸のとき。よって $a<0$ である。このとき最大値は $x=-1$ のとき $a^2$ で,条件より最大値は4だから,$a^2=4$ これを解くと,$a=±2$ 。$a<0$ に注意すると求める値は $a=-2$

【高校, 大学】LaTeXで簡単にきれいなレポートを書こう!高校生・大学生向けの使い方解説

大学や高校で数式を使うレポートを書くときにWordやGoogle ドキュメント,一太郎といったワープロソフトを使ったことがある人は多いと思います。でも,なんか教科書みたいに綺麗にならないなあと困ったことがあると思います。そこで,今回のブログでは理系の論文などでよく使われている$\mathrm{\LaTeX}$の使い方や,インストール方法について紹介していきます!

今回はWindowsでの使い方を説明をしていきます!

コードにおいて\と¥は同じ文字として認識されます。

1. インストール

以下のサイトを参考にインストールをしてください。

【大学生向け】LaTeX完全導入ガイド Windows編 (2022年)

2. 実際に書いてみよう!

VSCodeを起動して実際に書いてみましょう。

sample.texを作成します。レポートなどを書くときのひな型のコードは以下の通りです。

\documentclass[a4paper]{ltjsarticle}
\title{}
\author{}
\date{}

\begin{document}
\maketitle
ここには適当な文章を書いていきます。
\\これでこの行は上の文と同じ段落で改行されます。
\section{見出しってやつ}
段落では一文字下げが自動的に行われます。
\subsection{小見出しやで}

\end{document}

1行ずつ説明をしていきます。

\documentclass[a4paper]{ltjsarticle} []の中身で用紙のサイズの指定を{}の中身はLaTexの方式を指定しています。ltjsarticleLuaLaTexという方式でLaTexをPDFに変換します。変換の方式はいろいろありますが,何か指定がなければ比較的新しいLuaLaTexの使用をおすすめします。

\title{} {}の中にタイトルを書きます。

\author{} {}の中に著者(名前,学生番号,所属など…)を書きます。

\date{} {}の中に書いた日や提出日などを書きます。

以上の/titleから/dateの部分に書いたコードをプリアンブルといい,文書の基本的な設定や画像やグラフなどを使う際に使用する,パッケージの読み込みなどを書きます。

\begin {document} ~ end {document} この間には実際に表示される文章や数式,グラフなどを書いていきます。

\maketitle \title ~ \dateで書いた情報を文書上に表示させるための文です。通常は文章の最初に置くことが多いです。

\section{} {}のなかに見出しを書きます。段落で小見出しを付けるときは\subsection{}を書きます。

3. 数式を書いてみよう!

LaTeXのメインの機能の一つである数式を書いてみましょう。数式の書き方は主に2種類あります。

囲み方機能
\$~\$文中に数式を入れるときに使います。例:この関係は$ y = 2x$で表される
\$\$~\$\$数式をブロックとして入れるときに使います。
例:以上より,この問の答えは,
$$ x = \frac{(1+\sin{\theta})(1+e^x)}{1+\tan^2{\theta}}$$

以上のようにすべての数式は\$マークで囲む必要があります。

次にいくつかのよく使われる数学記号を紹介します。 これらの記号は大量にあるので必要に応じて自分で調べてください。

記号名入力出力
乗算\times$\times$
除算\div$\div$
分数\frac{a}{b}$\frac{a}{b}$
累乗x^a , b^{xyz+pqr}$x^a,b^{xyz+pqr}$
下付き文字a_n , b_{12}$a_n, b_{12}$
微分f'(x) , f^{\prime\prime}(x) , \frac{dx}{dt} , \dot{x}$f'(x) , f^{\prime\prime}(x) , \frac{dx}{dt} , \dot{x}$
積分\int {f(x)dx}, \int_{b}^a {(x^n+at)}dt$\int {f(x)dx}, \int_{b}^a {(x^n+at)}dt$
三角関数\sin{\theta},\cos{\theta},\tan{\theta}$\sin{\theta},\cos{\theta},\tan{\theta}$

以上が,基本的な数式を書くためのコマンドです。三角関数などは上記のようにかかなくても出力はされますが、見やすさなどの点から\sinなどを使うようにしましょう。

4. まとめ

以上が,基礎的なLaTeXの使い方です。

グラフを書いたり,図形を書いたりするにはパッケージをするにはそれぞれ適したパッケージなどがあるので調べながら,がんばってみてください。