Skip to content

Commit a8a1b91

Browse files
authored
Merge branch 'master' into dependabot/npm_and_yarn/q-io-2.0.6
2 parents ba7b7a9 + 315591b commit a8a1b91

File tree

20 files changed

+1212
-1319
lines changed

20 files changed

+1212
-1319
lines changed

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ sbt textBuildEpub
153153

154154
![CC-BY-NC-SA](https://licensebuttons.net/l/by-nc-sa/3.0/88x31.png)
155155

156-
の元で配布されています。ただし、直接の利益を得ることを目的としない研修などに利用することは可能とします。
157-
直接の利益というのは、研修自体を実費以上の金額で提供する行為を指します。社内でのScala研修などは一般的に
158-
直接の利益を得ることを目的としないので、断りなく使っていただいて構いません。
156+
の元で配布されています。ただし、CC-BY-NC-SAの「非営利」は[こちら](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en#s3:~:text=NonCommercial%20provided%20there%20is%20no%20payment%20of%20monetary%20compensation%20in%20connection%20with%20the%20exchange.)にかかれている通り、
157+
158+
> NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
159+
160+
直接的な金銭のやり取りが発生するものであり、たとえば、社内の研修や社内での開発で利用する場合は営利に該当しません。
161+
162+
また、本資料を改変した場合の公開義務についても[こちら](https://wiki.creativecommons.org/wiki/ShareAlike_interpretation#:~:text=The%20ShareAlike%20condition%20only%20applies%20when%20a%20work%20is%20publicly%20shared)
163+
164+
> The ShareAlike condition only applies when a work is publicly shared. You are not obligated to share things you make from SA works--you may create remixes and adaptations that you do not publish. If you are using ShareAlike materials privately and not sharing them with others, you do not have to comply with the license conditions. For example, if you translate a ShareAlike work for internal use within your office, you do not have to license your translation under an SA or compatible license unless you plan to share it with others.
165+
166+
にある通りです。たとえば本資料を改変して社内のドキュメントのために使ったとしても、一般に公開しない限り(社内のみで利用するなど)改変部分について本ライセンスを継承する必要はなく自由に利用可能です。
167+
168+
これらの点について複数の問い合わせがあったため明記することにしました。

build.sbt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ ThisBuild / onChangedBuildSource := ReloadOnSourceChanges
77

88
name := "textbook"
99

10-
scalaVersion := "2.13.13"
10+
scalaVersion := "2.13.14"
1111

12-
crossScalaVersions += "3.4.1"
12+
crossScalaVersions += "3.4.2"
1313

1414
enablePlugins(MdocPlugin)
1515

@@ -22,10 +22,10 @@ cleanFiles += compiledSrcDir
2222
libraryDependencies ++= Seq(
2323
// TODO sbtがScala 2.13対応したら再び有効化
2424
// "org.scala-sbt" % "sbt" % sbtVersion.value,
25-
"org.mockito" % "mockito-core" % "5.11.0",
25+
"org.mockito" % "mockito-core" % "5.12.0",
2626
"org.scalacheck" %% "scalacheck" % "1.18.0",
27-
"org.scalatest" %% "scalatest-flatspec" % "3.2.18", // mdocで使うので、テストライブラリだが、わざとcompileスコープ
28-
"org.scalatest" %% "scalatest-diagrams" % "3.2.18"
27+
"org.scalatest" %% "scalatest-flatspec" % "3.2.19", // mdocで使うので、テストライブラリだが、わざとcompileスコープ
28+
"org.scalatest" %% "scalatest-diagrams" % "3.2.19"
2929
)
3030

3131
Honkit.settings

package-lock.json

Lines changed: 1146 additions & 1263 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
"description": "Scala初学者がScalaを学ぶためのテキスト",
66
"scripts": {},
77
"devDependencies": {
8-
"@babel/core": "^7.24.5",
9-
"@babel/preset-env": "^7.24.5",
10-
"@babel/register": "^7.23.7",
8+
"@babel/core": "^7.24.7",
9+
"@babel/preset-env": "^7.24.7",
10+
"@babel/register": "^7.24.6",
1111
"babel-preset-power-assert": "3.0.0",
1212
"cheerio": "1.0.0-rc.12",
1313
"eslint": "^8.57.0",
14-
"eslint-config-eslint": "10.0.0",
14+
"eslint-config-eslint": "11.0.0",
1515
"gitbook-plugin-anchors": "0.7.1",
1616
"gitbook-plugin-footnote-string-to-number": "0.0.2",
1717
"gitbook-plugin-forkmegithub": "^2.2.0",
@@ -20,7 +20,7 @@
2020
"gitbook-plugin-regexplace": "2.1.2",
2121
"honkit": "5.1.4",
2222
"kramed": "0.5.6",
23-
"mocha": "10.4.0",
23+
"mocha": "10.6.0",
2424
"npm-check-updates": "^16.14.20",
2525
"npm-run-all": "4.1.5",
2626
"power-assert": "1.6.1",

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version = 1.9.9
1+
sbt.version = 1.10.0

project/plugins.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.2" )
1+
addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.4" )

src/advanced-trait-di.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
- この他のストレージ機能とパスワード機能のメソッドは内部的に使われるのみである
3131

3232
上記のプログラムでは実際に動かすことができるように[ScalikeJDBC](https://github.com/scalikejdbc/scalikejdbc)というデータベース用のライブラリとjBCryptというパスワースのハッシュ値を計算するライブラリが使われていますが、実装の詳細を理解する必要はありません。
33-
既にメソッドの実装を説明したことがある場合は実装を省略し[`???`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/Predef.scala#L344)で書くことがあります。
33+
既にメソッドの実装を説明したことがある場合は実装を省略し[`???`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/Predef.scala#L344)で書くことがあります。
3434

3535
## リファクタリング:公開する機能を制限する
3636

src/basic.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ $ sbt console
2020
とコマンドを打ってみましょう。
2121

2222
```
23-
Welcome to Scala version 2.13.13 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
23+
Welcome to Scala version 2.13.14 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
2424
Type in expressions to have them evaluated.
2525
Type :help for more information.
2626

src/collection.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ mutableなコレクションを効果的に使えばプログラムの実行速
2222
- `Map`(immutable)・`Map`(mutable)
2323
- `Set`(immutable)・ `Set`(mutable)
2424

25-
## [Array](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/Array.scala)
25+
## [Array](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/Array.scala)
2626

2727
まずは大抵のプログラミング言語にある配列です。
2828

@@ -96,7 +96,7 @@ arr
9696

9797
<!-- end answer -->
9898

99-
### [Range](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/Range.scala)
99+
### [Range](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/Range.scala)
100100

101101
`Range`は範囲を表すオブジェクトです。`Range`は直接名前を指定して生成するより、`to`メソッドと`until`メソッドを用いて呼びだすことが多いです。また、`toList`メソッドを用いて、その範囲の数値の列を後述する`List`に変換することができます。では、早速REPLで`Range`を使ってみましょう。
102102

@@ -112,7 +112,7 @@ arr
112112

113113
`to`は右の被演算子を含む範囲を、`until`は右の被演算子を含まない範囲を表していることがわかります。また、`Range``toList`で後述する`List`に変換することができることもわかります。
114114

115-
### [List](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/List.scala)
115+
### [List](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/List.scala)
116116

117117
さて、導入として大抵の言語にある`Array`を出しましたが、Scalaでは`Array`を使うことはそれほど多くありません。代わりに`List`
118118
`Vector`といったデータ構造をよく使います(`Vector`については後述します)。`List`の特徴は、一度作成したら中身を
@@ -132,9 +132,9 @@ lst(0) = 7
132132

133133
### Nil:空のList
134134

135-
まず最初に紹介するのは`Nil`です。Scalaで空の`List`を表すには`Nil`というものを使います。Rubyなどでは`nil`は言語上かなり特別な意味を持ちますが、Scalaではデフォルトでスコープに入っているということ以外は特別な意味はなく[単にobjectです](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/List.scala#L662)。Nilは単体では意味がありませんが、次に説明する`::`と合わせて用いることが多いです。
135+
まず最初に紹介するのは`Nil`です。Scalaで空の`List`を表すには`Nil`というものを使います。Rubyなどでは`nil`は言語上かなり特別な意味を持ちますが、Scalaではデフォルトでスコープに入っているということ以外は特別な意味はなく[単にobjectです](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/List.scala#L662)。Nilは単体では意味がありませんが、次に説明する`::`と合わせて用いることが多いです。
136136

137-
### [:: - Listの先頭に要素をくっつける](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/List.scala#L97)
137+
### [:: - Listの先頭に要素をくっつける](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/List.scala#L97)
138138

139139
`::`(コンスと読みます)は既にある`List`の先頭に要素をくっつけるメソッドです。これについては、REPLで結果をみた方が早いでしょう。
140140

@@ -742,7 +742,7 @@ List(1, 2, 3, 4) :+ 5 // 注意!末尾への追加は、Listの要素数分か
742742

743743
`mkString`をはじめとした`List`の色々なメソッドを紹介してきましたが、実はこれらの大半は`List`特有ではなく、既に紹介した`Range``Array`、これから紹介する他のコレクションでも同様に使うことができます。何故ならばこれらの操作の大半は特定のコレクションではなく、コレクションのスーパータイプである共通のトレイト中に宣言されているからです。もちろん、`List`に要素を加える処理と`Set`に要素を加える処理(`Set`に既にある要素は加えない)のように、中で行われる処理が異なることがあるので、その点は注意する必要があります。詳しくは[ScalaのAPIドキュメント](https://www.scala-lang.org/api/current/index.html)を探索してみましょう。
744744

745-
### [Vector](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/Vector.scala)
745+
### [Vector](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/Vector.scala)
746746

747747
`Vector`は少々変わったデータ構造です。`Vector`は一度データ構造を構築したら変更できないimmutableなデータ構造
748748
です。要素へのランダムアクセスや長さの取得、データの挿入や削除、いずれの操作も十分に高速にできる比較的
@@ -763,11 +763,11 @@ Vector(1, 2, 3, 4, 5).updated(2, 5)
763763
`Map`はキーから値へのマッピングを提供するデータ構造です。他の言語では辞書や連想配列と呼ばれたりします。
764764
Scalaでは`Map`として一度作成したら変更できないimmutableな`Map`と変更可能なmutableな`Map`の2種類を提供しています。
765765

766-
### [`scala.collection.immutable.Map`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/Map.scala)
766+
### [`scala.collection.immutable.Map`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/Map.scala)
767767

768768
Scalaで何も設定せずにただ`Map`と書いた場合、`scala.collection.immutable.Map`が使われます。その名の通り、一度
769-
作成すると変更することはできません。内部の実装としては主に[`scala.collection.immutable.HashMap`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/HashMap.scala)
770-
[`scala.collection.immutable.TreeMap`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/TreeMap.scala)の2種類がありますが、通常は`HashMap`が使われます。
769+
作成すると変更することはできません。内部の実装としては主に[`scala.collection.immutable.HashMap`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/HashMap.scala)
770+
[`scala.collection.immutable.TreeMap`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/TreeMap.scala)の2種類がありますが、通常は`HashMap`が使われます。
771771

772772
```scala mdoc:nest
773773
val m = Map("A" -> 1, "B" -> 2, "C" -> 3)
@@ -807,8 +807,8 @@ Set(1, 1, 2, 3, 4)
807807
### `scala.collection.immutable.Set`
808808

809809
Scalaで何も設定せずにただ`Set`と書いた場合、`scala.collection.immutable.Set`が使われます。immutableな`Map`の場合と
810-
同じく、一度作成すると変更することはできません。内部の実装としては、主に [`scala.collection.immutable.HashSet`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/HashSet.scala)
811-
[`scala.collection.immutable.TreeSet`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/immutable/TreeSet.scala) の2種類がありますが、通常は`HashSet`が使われます。
810+
同じく、一度作成すると変更することはできません。内部の実装としては、主に [`scala.collection.immutable.HashSet`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/HashSet.scala)
811+
[`scala.collection.immutable.TreeSet`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/immutable/TreeSet.scala) の2種類がありますが、通常は`HashSet`が使われます。
812812

813813
```scala mdoc:nest
814814
val s = Set(1, 2, 3, 4, 5)
@@ -820,8 +820,8 @@ s // 元のSetはそのまま
820820

821821
### `scala.collection.mutable.Set`
822822

823-
Scalaの変更可能な`Set``scala.collection.mutable.Set`にあります。主な実装としては、[`scala.collection.mutable.HashSet`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/mutable/HashSet.scala)
824-
[`scala.collection.mutable.TreeSet`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/collection/mutable/TreeSet.scala)がありますが、通常は`HashSet`が使われます。
823+
Scalaの変更可能な`Set``scala.collection.mutable.Set`にあります。主な実装としては、[`scala.collection.mutable.HashSet`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/mutable/HashSet.scala)
824+
[`scala.collection.mutable.TreeSet`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/collection/mutable/TreeSet.scala)がありますが、通常は`HashSet`が使われます。
825825

826826
```scala mdoc:nest
827827
import scala.collection.mutable

src/error-handling.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ Javaのエラー処理では例外が中心的な役割を担っていました
156156

157157
ここでは正常の値とエラー値のどちらかを表現できるデータ構造の紹介を通じて、Scalaの関数型のエラー処理の方法を見ていきます。
158158

159-
### [Option](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/Option.scala)
159+
### [Option](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/Option.scala)
160160

161161
OptionはScalaでもっとも多用されるデータ型の1つです。
162162
前述のとおりJavaのnullの代替として使われることが多いデータ型です。
@@ -485,7 +485,7 @@ for { i1 <- v1
485485

486486
<!-- end answer -->
487487

488-
### [Either](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/util/Either.scala)
488+
### [Either](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/util/Either.scala)
489489

490490
Optionによりnullを使う必要はなくなりましたが、いっぽうでOptionでは処理が成功したかどうかしかわからないという問題があります。
491491
Noneの場合、値が取得できなかったことはわかりますが、エラーの状態は取得できないので、使用できるのはエラーの種類が問題にならないような場合のみです。
@@ -634,7 +634,7 @@ f(g())
634634
似たような挙動は高階関数を使えば書けるのですが、名前渡しパラメータのほうが簡潔な記述ができるという点でより優れています。
635635

636636

637-
### [Try](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/util/Try.scala)
637+
### [Try](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/util/Try.scala)
638638

639639
ScalaTryEitherと同じように正常な値とエラー値のどちらかを表現するデータ型です。
640640
Eitherとの違いは、2つの型が平等ではなく、エラー値がThrowableに限定されており、型引数を1つしか取らないことです。
@@ -668,7 +668,7 @@ for {
668668
} yield i1 * i2 * i3
669669
```
670670

671-
#### [`NonFatal`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/util/control/NonFatal.scala)の例外
671+
#### [`NonFatal`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/util/control/NonFatal.scala)の例外
672672

673673
`Try.apply`がcatchするのはすべての例外ではありません。
674674
NonFatalという種類の例外だけです。
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
scalaVersion := "2.13.13"
1+
scalaVersion := "2.13.14"
22

3-
crossScalaVersions += "3.4.1"
3+
crossScalaVersions += "3.4.2"
44

55
libraryDependencies ++= Seq(
6-
"org.scalikejdbc" %% "scalikejdbc" % "4.2.1",
6+
"org.scalikejdbc" %% "scalikejdbc" % "4.3.0",
77
"org.mindrot" % "jbcrypt" % "0.4"
88
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.9.9
1+
sbt.version=1.10.0
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
scalaVersion := "2.13.13"
1+
scalaVersion := "2.13.14"
22

3-
crossScalaVersions += "3.4.1"
3+
crossScalaVersions += "3.4.2"
44

55
libraryDependencies ++= Seq(
6-
"org.scalikejdbc" %% "scalikejdbc" % "4.2.1",
6+
"org.scalikejdbc" %% "scalikejdbc" % "4.3.0",
77
"org.mindrot" % "jbcrypt" % "0.4",
8-
"org.scalatest" %% "scalatest-wordspec" % "3.2.18" % "test"
8+
"org.scalatest" %% "scalatest-wordspec" % "3.2.19" % "test"
99
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.9.9
1+
sbt.version=1.10.0

src/function.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Scalaの関数
22

33
Scalaの関数は、他の言語の関数と扱いが異なります。Scalaの関数は単に
4-
[`Function0`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/Function0.scala)[`Function22`](https://github.com/scala/scala/blob/v2.13.13/src/library/scala/Function22.scala) までのトレイトの無名サブクラスのインスタンスなのです。
4+
[`Function0`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/Function0.scala)[`Function22`](https://github.com/scala/scala/blob/v2.13.14/src/library/scala/Function22.scala) までのトレイトの無名サブクラスのインスタンスなのです。
55

66
たとえば、2つの整数を取って加算した値を返す`add`関数は次のようにして定義することができます:
77

src/implicit.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,12 +343,12 @@ println(sum(List(Point(1, 2), Point(3, 4), Point(5, 6)))) // Point(9, 12)
343343

344344
型クラス:
345345

346-
* [Numeric[T]](https://www.scala-lang.org/api/2.13.13/scala/math/Numeric.html)
346+
* [Numeric[T]](https://www.scala-lang.org/api/2.13.14/scala/math/Numeric.html)
347347

348348
型クラスのインスタンス:
349349

350-
* [IntIsIntegral](https://www.scala-lang.org/api/2.13.13/scala/math/Numeric$$IntIsIntegral$.html)
351-
* [DoubleIsFractional](https://www.scala-lang.org/api/2.13.13/scala/math/Numeric$$DoubleIsFractional$.html)
350+
* [IntIsIntegral](https://www.scala-lang.org/api/2.13.14/scala/math/Numeric$$IntIsIntegral$.html)
351+
* [DoubleIsFractional](https://www.scala-lang.org/api/2.13.14/scala/math/Numeric$$DoubleIsFractional$.html)
352352

353353
<!-- end answer -->
354354

0 commit comments

Comments
 (0)