- 1. Spring Boot フォーム入力のエラーメッセージを簡単に出す
- 2. [Java] 防御しすぎない防御的プログラミング
- 3. Sudachi Java: 辞書のビルド
- 4. curry化と部分適用をJavaで ~命名編~
- 5. thymeleaf + SpringでJavaの定数やEnum、Staticメソッドを使いたくなったときの対処法
- 6. 抽象クラスと多態性の演習
- 7. 【Java】JavaおじさんのJava放浪記:その6(コレクション)
- 8. try-catch文の使い方まとめ②
- 9. regular expressionによるmatching
- 10. JavaでSpotify Web API叩いてみた
- 11. instanceが同一か確認。equals method
- 12. Integerクラスについて。
- 13. 今さらJavaラムダ式
- 14. データ型と参照型 Java
- 15. Javaエンジニアから見たGoの独特な文化
- 16. プログラミング初心者大学生がJavaを勉強した内容について
- 17. [Java] テスタブルにリファクタして、プライベートメソッドをテストしていこう
- 18. 【Java】JavaおじさんのJava放浪記:その5(日付)
- 19. Webアプリケーションとは メモ
- 20. #32 Spring AOPの基礎から実装まで
Spring Boot フォーム入力のエラーメッセージを簡単に出す
## はじめに
今回はフォーム入力のエラーメッセージを簡単に実装する方法です。
## Entityクラス
今回は書籍投稿アプリのEntityクラスのコードです。
“`
@NotBlank(message = “入力必須です!”)
@Column(name = “title”)
@Size(max = 30)
private String title;@NotBlank(message = “入力必須です!”)
@Column(name = “genre”)
@Size(max = 10)
private String genre;@NotNull(message = “入力必須です!”)
@Column(name = “favorite”)
@Min(0)
@Max(5)
private int favorite;@NotBlank(message = “入力必須です!”)
@Column(name = “content”)
@Size(max = 500)
private String conten
[Java] 防御しすぎない防御的プログラミング
## はじめに
最近「防御的プログラミング」という言葉を記事を読んでいて知ったのですが、
どうもサンプルコードを手続型プログラミング的なコードばかりでてきて
納得がいかないので、オブジェクト指向プログラミングやSpring AOP、Lombokなどを用いて
防御的なプログラムを書いてみようと思います。## 概念のおさらい
具体的なコードに触れる前に
「防御的的プログラミング」と「契約プログラミング」の概念をおさらいしておきましょう。### 防御的プログラミング
現場で役立つシステム設計の原則[^1]で説明されている防御的プログラングの定義は以下の通りです。>「サービスを提供する側は、利用する側が何をしてくるかわからない」という
>前提でさまざまな防御的なロジックを書きます。
>利用する側も、提供側が何を返してくるかわからないという前提で、戻ってきた値のnull チェックや、
>さまざまな検証のコードを書きます。### 契約プログラミング
一方同一書籍より、契約による設計とも呼ばれる契約プログラミングの定義は以下のようになっております>サービスを利用する側と、サービス
Sudachi Java: 辞書のビルド
# 初めに
これまでSudachi辞書のビルドはCLIのみサポートしていたのですが、Sudachi Javaの0.6.0以降はAPIが存在しています。アプリケーションでユーザー辞書を使うときなどに、動的に辞書をコンパイルすることができるようになりました。:::note warn
紹介するAPIはExperimentalです。1.0リリースまで変更する可能性があります。紹介するコードは変更なしで動くでしょうが、それ以外のメソッドは変更される可能性が高いです。
:::# システム辞書をビルドしましょう
まずは[辞書ソースのCSV](http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict-raw/)をダウンロードしてください。small, core, fullで複数のファイルを使う場合は同じバージョンのCSVファイルを使ってください。
## システム辞書
このAPIは`com.worksap.nlp.sudachi.dictionary.build.DicBuilder`によって実装されています。ビル
curry化と部分適用をJavaで ~命名編~
この記事は アイスタイル Advent Calendar 2022 23日目の記事です。
https://qiita.com/advent-calendar/2022/istyle
# はじめに
みなさんこんにちは。
入社4年目、アイスタイルのバックエンドサービスを担当しているkuriyamayです。
アドベントカレンダー2本目の投稿になります。1本目は`curry化と部分適用をJavaで`という内容で記事を書きました。
今回は既存メソッドをcurry化・部分適用して、さらに命名にも気をつかった記述にしたいと思います。curry化や部分適用とは?という方は1本目の記事をご覧ください。
https://qiita.com/kuriyamay/items/45f69ceda78d88acd871
# 既存メソッドのcurry化と部分適用
2つの引数を受け取り結果を返すメソッドがあります。
例のため、分かりやすいように2つのStringを受け取り結合して返すだけの簡単な処理です。
“`java
public String concat(String left, Str
thymeleaf + SpringでJavaの定数やEnum、Staticメソッドを使いたくなったときの対処法
# はじめに
以前に書いた記事の続編です。
https://qiita.com/n_slender/items/d0e2a861dcc806b5882e
「thymeleaf enum」「thymeleaf constant」で検索すると、 `T(my.package.MyEnum).MONDAY`, `${T(com.baeldung.thymeleaf.model.Color).values()}`, `T(com.example.Constants).MIN_VALUE` といった、thymeleafから直接呼び出すような形の記事がでてくることが多いです。
https://stackoverflow.com/questions/24937441/comparing-the-enum-constants-in-thymeleaf
https://stackoverflow.com/questions/68686397/how-to-use-variables-from-a-constants-class-in-thymeleaf-numbers-sequence-met
抽象クラスと多態性の演習
# 問題
OnitaijiPolymoクラスを抽象クラスとして継承したクラスPeachBoy, Dog, Monkey, Kijiを作り、fightメソッドをオーバーライドしてください。Mainクラスではポリモーフィズムを用いて、各クラスのfightメソッドを呼び出してください。“`java:抽象クラス
package p_polymo;
//修飾子の後にabstractで定義
public abstract class OnitaijiPolymo {
public abstract void fight();
}
“`“`java:子クラス
package p_polymo;public class PeachBoy extends OnitaijiPolymo {
private String name = “桃太郎”;@Override
public void fight() {
System.out.println(this.name + “は刀で戦った!”);
}
}
“`
“`java:子クラス
package p_polymo;
【Java】JavaおじさんのJava放浪記:その6(コレクション)
# はじめに
こんにちは、Javaおじさんです。
今回は、Javaにおけるコレクションについて大まかにまとめていきます。
何卒宜しくお願いいたします。## 記事の内容
– Javaにおけるコレクションの扱いについて大雑把に理解していく。
# Javaにおけるコレクション
## コレクションとは
– 複数のデータ(=要素)を保存できる箱
– リスト、セット、マップの3種類に大別
– 要素の型に基本型を指定できない → ラッパークラスの使用## リスト
– 各要素に順序がある (最初の要素は0番目)
– ArrayListクラス(大抵これ)、LinkedListクラスの2つがある (内部のアルゴリズムの違い)
“`java
// 使用例
ArrayListfruits = new ArrayList<>(); // => [] (変数の宣言&インスタンスの代入)
fruits.add(“リンゴ”); // => true ( [リンゴ]、末尾に追加)
fruits.add(“フィグ”); // => true ( [リンゴ, フィグ] )
fr
try-catch文の使い方まとめ②
## 目次
[1.throw](#1-throw)
[2.throws](#2-throws)
[3.try-catch文のネスト](#3-try-catch文のネスト)
[4.複数の例外を一気にキャッチする](#4-複数の例外を一気にキャッチする)※「try-catch文の使い方まとめ①」はこちら↓
https://qiita.com/osakanaaaa/items/860eb34aa0b19b5b62c3
## 1. throw
### tryブロック内のthrow
“`java
package jp.co.study.sample;public class Qiita {
public static void main (String args[]) {String str1 = “おさかな”;
try {
Double.parseDouble(str1);
System.out.println(str1 + “:この文字列は数字です”);throw new NumberF
regular expressionによるmatching
find()は部分一致検索
lookingAtは先頭一致
matchesは完全一致
“`java
String s = “ABC1DEF”;
Pattern p = Pattern.compile(“[A-Z]{3}”);
Matcher mc = p.matcher(s);
System.out.println(mc.find());
System.out.println(mc.group());
System.out.println(mc.find());
System.out.println(mc.group());
System.out.println(mc.find());
System.out.println(“—————–“);
System.out.println(mc.lookingAt());
System.out.println(mc.group());
JavaでSpotify Web API叩いてみた
# 本記事について
この記事では、Javaを使用しSpotify Web APIを叩いて、楽曲情報の取得やプレイリストへの追加をしてみた方法を紹介します。:::note info
【 Spotify Web APIとは 】
音楽ストリーミングサービスで有名なSpotifyが提供しているAPIです。
Spotify Web APIによって下記の情報等が取得できます。– アルバム情報
– アーティスト情報
– トラック(楽曲)情報
– プレイリスト情報
:::>**Spotify Web API**
>You can use Spotify’s Web API to discover music and podcasts, manage your Spotify library, control audio playback, and much more.## サンプルコード
今回紹介する機能を実装したサンプルとして、GithubのURLを下記に記載します。
https://github.com/9-sho-5/sys_proj_B01
## 実装について
instanceが同一か確認。equals method
newした2つのinstanceを比較する
“`Sample.java
public class Sample {
int i;
}
“`
“`java
public static void main(String[] args) {
Sample s1 = new Sample();
Sample s2 = new Sample();
System.out.println(s1.equals(s2));
s1 = s2;
System.out.println(s1.equals(s2));
}
“`
“`
false
true
“`
Integerクラスについて。
Stringからintへの変換
“`java
public static void main(String[] args) {
Integer i1 = Integer.valueOf(“2”);
int i2 = i1.intValue() * 3;
System.out.println(i2);
}
“`
“`
6
“`
Integerからintはunboxingのため、intValue()は省略できる
“`java
public static void main(String[] args) {
Integer i1 = Integer.valueOf(“2”);
int i2 = i1 * 3;
System.out.println(i2);
}
“`
“`
6
“`
IntegerのConstructorでもString→intできる
“`java
public static void main(String[] args)
今さらJavaラムダ式
## 1. ラムダ式とは
– JavaSE8から導入された構文
– 関数型インターフェースを簡潔に記載することができる“`java
Listlist = new ArrayList<>(Arrays.asList(“A”, “B”, “C”)); // こういうやつ
list.forEach(i -> System.out.println(i));// 結果
// A
// B
// C
“`## 2. 無名クラス(匿名クラス)と関数型インターフェース
### 無名クラス(匿名クラス)とは
– 名前がないクラスのこと
– 一度きりしか使わないといった場合に使用する
– コードの記載が綺麗になる無名クラスを使用する場合、new class名()の後に{}を記載します
※関数型インターフェースのConsumerを使用していますが後で説明あります*無名クラスを使用しない場合*
“`java
class CustomConsumer implements Consumer{
@Override
public v
データ型と参照型 Java
### データ型
Javaにはデータ型が2種類あります
– 基本データ型(プリミティブ型)
“`java
byte short int long
float double boolean char
“`– 参照型(クラス型)
“`java
String Array Class
“`### 基本データ型と参照型のデータ保存方法の違い
– 基本データ型
メモリ領域に格納するのはデータの値– 参照型
メモリ領域に格納するのはデータの値とデータを格納した番地の値
格納順序(Arrayを例にした場合)“`java
// Arrayの宣言
// この時点ではデータの格納領域がどれくらいかがわからないため変数aを入れるためだけのメモリを確保する
int[] a;// データの格納
// 変数へデータを格納した時点でメモリ上では格納した値の数分メモリを確保する
// 1で確保したメモリには2で確保したメモリの最初の番地を格納する
a = { 100, 200, 300 };
“`参照型は上記のような特性があるためデータの更新は注意
Javaエンジニアから見たGoの独特な文化
# はじめに
Java中心で仕事をしていた人がGoを書いてみると様々な文化の違いにぶつかると思います。そもそもオブジェクト指向言語と手続き型言語であるなど根本的に異なる点は多いのですが、「よりシンプルに」をモットーとするGoにはよりJavaエンジニアを困惑させる文化がたくさんあるように見受けられます。
本記事ではJavaエンジニアがGoを書いた際に感じた独特な文化を経験ベースで書いてみます。Goをこれから書くであろうJavaエンジニアのお役に立てれば幸いです。
**対象読者**
– これからGoを書くことになりそうなJavaエンジニア
– Javaと比べたGo特有の文化を知りたい人
– 実際にGoの開発をするにあたって役に立つ思想を知りたい人**本記事の対象でない人**
– Goの構文や書き方を基本から学びたい人
– とりあえずプロダクトを作って動かしてみたい人
– 実際に開発する上で意識しない裏の仕組みやアーキテクチャを知りたい人# インタフェースの実装を明示的に指定しない
GoではJavaの`implements`のような宣言がありません。
インタフェースで定義し
プログラミング初心者大学生がJavaを勉強した内容について
初めに
—
記事をご覧いただきありがとうございます。
この記事がQiitaでの初めての記事となりますので所々おかしい部分もあるかもしれませんがご了承ください。まずは私の情報について簡単に紹介したいと思います。
・プログラミングは高校3年生の2022年1月から始める。(友人の誘い)
・最初はお決まりのProgateから、主にフロントエンドのHTML/CSS/SASS/JavaScriptを勉強
・プロゲートでは飽き足らず書籍に手を出す → 惨敗
・自分の勉強方法を見直ししっかりと本質を理解するようになる → さらにのめり込む
・大学に入学しプログラミング関連のインカレに所属 → 自分の非力さを痛感
・さらにのめり込みひたすらコードを書く毎日 ハッカソンなどにも参加し始める
・友人の紹介でインターンを始める。 (主にフロントエンド)
・さらにエンジニアでかつ大学生のつながりが欲しく自分でプログラミングインカレサークル「ENTER」を設立ではなぜJavaなのか?
–
簡単に私のことを知ってもらえた上でなぜ今Javaなのか?についてお話しさせていただきたいと思います。理
[Java] テスタブルにリファクタして、プライベートメソッドをテストしていこう
この記事はソースコードがテスタブルになるようにリファクタを行い、プライベートメソッドをJavaのリフレクションを使ってテストしていく方法を紹介します。
※SpringFrameworkを利用している前提になります。## リファクタ前
まず元のソースコードです。beforeパッケージに格納しています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81962/7d994591-7eab-a6be-43b2-6f4d48410aaf.png)
こちらのUserServieクラスは、publicメソッド`calculateTimeZoneAge`つ持っています。フィールドに@AutowiredでUserRepositoryを注入しています。
UserRepositoryはDBアクセスするクラスでuserIdをもとに、DBにアクセスしてUserクラスを返却するメソッド`getUser`を持っています。
`calculateTimeZoneAge`というメソッドは、ユーザーが住んでいる
【Java】JavaおじさんのJava放浪記:その5(日付)
# はじめに
こんにちは、Javaおじさんです。
今回は、Javaにおける日付について大まかにまとめていきます。
何卒宜しくお願いいたします。## 記事の内容
– Javaにおける日付の扱いについて大雑把に理解していく。
# Javaにおける日付
– 日付:ミリ秒で管理 (1970年1月1日0時0分0ミリ秒を0として、経過時間を`long`型で管理)
– Dateクラス:日付を表示 (ミリ秒で入力)
“`java
Date today = new Date(15141170800000L); // => Sat Nov 03 00:00:00 JST 2018
“`
– Calenderクラス:現在の日付を取得
“`java
Calender calender = Calender.getInstance(); // => Calenderクラスのインスタンス(現在の日付)の取得
Date today = calender.getTime(); // => getTimeメソッドでインスタンスが保持している現在の日付を取得
// => Thu Dec 22
Webアプリケーションとは メモ
## Webとは
あらゆる場所から情報を取得することを可能にするシステム。## Webブラウザとは
Webページを表示するソフトウエア。代表例は、google chrome、Safari。## Webサーバー
Webページの情報を提供するコンピュータ。## リクエスト
WebサーバーにWebページの情報を要求すること。
どんなデータが欲しいのかをWebサーバに伝える。
また、伝える際に送信元のIPアドレス、ブラウザ情報、入力情報を一緒に送る。## レスポンス
Webサーバーがリクエストに対する結果を返すこと。## Webアプリケーションとは
Web環境下で動くプログラム## バックエンドで使用される言語
Java,PHP,Python
java は高い安全性と情報の高速処理を実現している。、## フロントエンドで使用される言語
主にjavascript。参考資料
#32 Spring AOPの基礎から実装まで
# #32 Spring AOPの基礎から実装まで
今回はSpringの大きな特徴の1つと言われているAOPについてまとめて行きます。# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
mybatis-spring-boot-starter ver 2.2.2
Model Mapper ver 3.1.0
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46
thymeleaf-layout-dialect ver 3.0.02. 依存関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884987/58b53ccd-7cf2-2d82-4214-9f0c08fced2e.png)# 成果物