S-JIS[2011-01-09/2017-01-16] �ύX����
Scala��Option�́A�l�����b�v����i��ށj�N���X�B
�����̏������ʁi�I�u�W�F�N�g�j��Ԃ����\�b�h�ɂ����āA�����ł��Ȃ���������Java�ł�null��Ԃ��悤�ɂ��鎖������B
������null���ƁA���̂܂g����NullPointerException�ɂȂ��Ă��܂��B
Scala�ł́A������������Option�N���X���g���B
Option�N���X�̎q�N���X�ɂ�Some�N���X��None�I�u�W�F�N�g������B
�Ԃ������l��Some�ɓ���ĕԂ��B
�����ł��Ȃ���������\���Ƃ���None��Ԃ��B
scala> def div(n: Int, m: Int) = {
| if (m != 0) Some(n / m) else None
| }
div: (n: Int,m: Int)Option[Int]
scala> div(10, 5)
res1: Option[Int] = Some(2)
scala> div(1, 0)
res2: Option[Int] = None
Option�iSome�ENone�j�̃��\�b�h�B
| ���\�b�h�i��j | �������� | ���l | |
|---|---|---|---|
| Some�̂Ƃ� | None�̂Ƃ� | ||
opt.isEmpty |
false | true | �@ |
opt.isDefined opt.nonEmpty |
true | false | �@ |
opt.get |
��������l | NoSuchElementException������ | �@ |
opt.getOrElse(�f�t�H���g�l) |
�����Ă���l | �w�肳�ꂽ�f�t�H���g�l | �߂�l�̌^�́A�����Ă���l�ƃf�t�H���g�l�̋��ʂ̐e�N���X�ɂȂ�B |
opt.orNull |
�����Ă���l | null | AnyVal�iInt���j�������Ă���Some�ł͎g���Ȃ��B �i�R���p�C���G���[�j |
opt.orElse(Option(�l)) |
�������g | �w�肳�ꂽOption(�l) |
�@ |
opt.map(��) |
Some(���̏�������) | None | Option�ɓ����Ă��钆�g��ϊ�����B[2017-01-16] ����null��Ԃ��Ă�None�ɂ͂Ȃ�Ȃ��B ���R���N�V������map |
opt match { case Some(v) => v case _ => "nothing" } |
��������l | "nothing" | �@ |
Option(�l) Option.apply(�l) |
�@ | �l��null�ȊO����Some(�l)��Ԃ��B�l��null���� None��Ԃ��B�iScala2.8�ȍ~�̎d�l�炵���B[2011-06-12]�j�inull��Ԃ��悤��Java�̃��\�b�h�̖߂�l��Option�ɂ������ꍇ�ɕ֗��j |
|
Some(�l) Some.apply(�l) |
�@ | Some(�l)��Ԃ��B�l��null��������Anull��ێ�����Some���Ԃ�B Some(�l1,�l2)�Ə����ƁA(�l1,�l2)�Ƃ����^�v�����l�ɂȂ�B����́A Some.apply(�l1,�l2)�Ƃ����Ăяo���ł���Some��apply()�͈�����1�̃��\�b�h�ł���B Scala�ł�������1�̂Ƃ��͊ۊ��ʂ��ȗ��ł����̂� �u Some.apply �l�v�Ɖ��߂���A�l�������^�v���ƌ��Ȃ����B |
|
���̑���foreach�Efilter�Emap�Ƃ��������\�b�h�i�R���N�V�����Ɠ��l�j������B
��{�I��Some�̏ꍇ�������������BNone���Ɩ������BList�ŗႦ��ANone�͋X�g�iNil�j������B
Option���g�����R�[�f�B���O��B[2011-05-04]
| ��肽���� | �P���ȍl���� | �ǂ������ȕ��@ | ���l |
|---|---|---|---|
| �l���L��Ƃ�������������B [2011-04-10] |
opt match { case Some(v) => println(v) case _ => } |
opt.foreach { v => println(v) } |
foreach���g���ƁA�l���L��Ƃ��iSome�̂Ƃ��j�������s�����B �@ |
| �l���L��Ƃ��͕ϊ����A�����Ƃ��̓f�t�H���g�l��Ԃ��B [2011-05-04] |
val r = opt match { case Some(v) => v.convert case _ => �f�t�H���g�l } |
val r = opt.map(_.convert). getOrElse(�f�t�H���g�l) |
None��map�́i���������j���None��Ԃ��̂� �Ō��getOrElse�Ńf�t�H���g�l���Ԃ�B |
| List����łȂ��Ƃ��͐擪�v�f�A��̂Ƃ��̓f�t�H���g�l��Ԃ��B [2011-06-18] |
val r = if (list.nonEmpty) list.head else �f�t�H���g�l |
val r = list.headOption. getOrElse(�f�t�H���g�l) |
headOption�́A�l����������Some�ɓ���ĕԂ��B�������None��Ԃ��B |
| null�ȊO�̂Ƃ��������\�b�h���Ăяo���A����ȊO�̂Ƃ���null��Ԃ��B [2011-06-04] |
if (v ne null) v.convert else null |
Option(v).map(_.convert).orNull |
�@ |
| ������������Ȃ炻�̒l�A����ȊO�̓f�t�H���g�l��Ԃ��B [2011-06-12] |
if (v >= 0) v else -1 |
Some(v).filter(_ >= 0). getOrElse(-1) |
�Q�l�F missingfaktor������c�C�[�g v��AnyVal�iInt�Ƃ��j�Ȃ�null�ɂȂ邱�Ƃ͖����̂ŁAOption�łȂ�Some�ł����B |
| null�ȊO�̂Ƃ������������f���s���B [2011-04-24] |
if ((v ne null) && (v���g�����������f)) { �` } |
if (Option(v).exists{ v => v���g�����������f }) { �` } |
v��null����Option(v)��None�ɂȂ�̂ŁAexists�́i���������j���false�ƂȂ�B |
| ���\�b�h�̖߂�l��null�ȊO�̊ԁA���������s����B [2011-06-04] |
val br = new BufferedReader(�`)
var s = ""
while ({ s = br.readLine; s ne null}) {
println(s)
}
|
val br = new BufferedReader(�`)
new Iterator[String] {
var opt = Option(br.readLine)
def hasNext = opt.nonEmpty
def next() = {
val r = opt.orNull
opt = Option(br.readLine)
r
}
}.foreach { s =>
println(s)
}
|
��Scala��Reader�������� |
| �l�̂���I�v�V��������Seq�ɓ����B [2011-05-04] |
var seq = Seq.empty[A]
if (opt1.nonEmpty) {
seq :+= opt1.get
}
if (opt2.nonEmpty) {
seq :+= opt2.get
}
|
var seq = Seq.empty[A] seq ++= opt1 seq ++= opt2 |
�useq :+= v�v�́useq = seq
:+ v�v�������B�u :+�v�͗v�f���ɒlj����鉉�Z�q�B�u ++�v�̓R���N�V�������m���������鉉�Z�q�BOption���R���N�V���������ƂȂ�B |
val seq = opt1.toSeq ++ opt2 |
|||
val seq = (opt1 ++ opt2).toSeq |
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@
�@