Scala�̓������Љ�A��{�\������A�N���X�ȂǁAScala�̊�{�I�ȋ@�\�ɂ��ĉ���������A��
�@�O��̋L���uScala�̃g���C�g�Ńv���O���}���~�b�N�X�C�����Ă����v�ł́AScala�̏d�v�ȋ@�\�ł����g���C�g�̊�{�I�Ȏg��������n�܂�A�����̃g���C�g��ςݏd�˂��ꍇ�ɂǂ̂悤�ȏ��Ԃ����`������邩�ɂ��Ă��Љ�܂����B������^�̃p�����[�^���ɂ��ďЉ�܂��B
�@��1��L���ł́AScala�W����REPL��Scala IDE�œ�����m�F���Ă݂܂����B����{�L���̃T���v���R�[�h�́A�ǂ���Ŋm�F���Ă����͂���܂��A�Θb�I�Ɏ��s�ł��A1�����ƂɃR�[�h�̌��ʂ��������ĕ֗��Ȃ̂ŁA��{�I�ɂ�REPL��p���Đ������Ă����܂��B
�@Scala IDE���g�p����ꍇ�A��1��L���́wScala IDE for Eclipse�ŁuHello Scala�I�v�x���Q�Ƃ��ăv���W�F�N�g���쐬���Ď��s���Ă��������BREPL���g�p����ꍇ�́A�R���\�[�����scala�R�}���h�����s���AREPL���N�����Ă��������B
�@��ʓI�ɂ��R���X�g���N�^�����\�b�h���g�p����Ƃ��A�������g�p���ăp�����[�^�����܂��B�^�̃p�����[�^���Ƃ́A����Ɠ����悤���N���X��\�b�h�ȂǂŎg�p����^���̂��̂��p�����[�^�����čė��p�������߂�@�\�ł��B
�����̋@�\��Java�ł́uGenerics�i�W�F�l���b�N�^���̌^�j�v�ƌĂ�Ă���AJDK 1.5����g���܂��BJava�ł�Generics�ɂ��Ēm�肽�����́A�L���u�L���[�\����Java�Ŏ������ăW�F�l���b�N�^�𗝉������v�Ȃǂ��������������B
�@�^�p�����[�^���g���Ă݂܂��傤�B�R���N�V�����ł悭�g�p����List�͌^�p�����[�^���w�肵�AString�^�⎩���Œ�`�����^�ȂǁA���낢��Ȍ^���w��ł��܂��BREPL��String�^���i�[����List�^�ϐ����`���܂��B
scala> val sList = List[String]("a","b","c") sList: List[java.lang.String] = List(a, b, c)
�@�uList[�^��](�����l)�v�Ƃ��āAList�̌^�p�����[�^���w�肵�Ă��܂��B�����ł͌^�p�����[�^��String���I�Ɏw�肵�Ă��܂����A�w�肵�Ȃ��ꍇ�ł��^���_�ɂ��List[String]�Ƃ��Ĕ��f����܂��B
scala> val sList = List("a","b","c") sList: List[java.lang.String] = List(a, b, c)
�@List�̐擪�����o���ƁA������String�^�Ƃ��Ď擾�ł��܂��B
scala> sList.head res2: java.lang.String = a
�@�������A�^�p�����[�^�����w�肵�Ȃ��ƁA�����String�ȊO�̗v�f��n�����Ƃ����ꍇ��List[Any]�^�Ƃ��Ē�`����Ă��܂��܂��B
scala> val sList = List("a","b",1) sList: List[Any] = List(a, b, 1)
�@String�^�ȊO�̌^��z�肵�Ă��Ȃ���A�����炭sList���g�p������̃��\�b�h�Ăяo���ŃR���p�C���G���[���������ĊԈႢ�ɋC�t�����ƂɂȂ�ł��傤�B�����ƒ�`���Ɍ^�p�����[�^��String�^�Ƃ��Ďw�肵���ꍇ�AString�^�ȊO�̗v�f��n�����Ƃ���ƁA�R���p�C�����ɃG���[�ɂȂ�܂��B
scala> val sList = List[String]("a","b",1) <console>:7: error: type mismatch; found : Int(1) required: String val sList = List[String]("a","b",1)
�@���̂悤�ɁA�^�p�����[�^��K�Ɏg���AScala��List�́u�^���S�i������^�̏�Ԃ������N����������ϊ��������Ȃ���ԁj�v�ɑ���ł��܂��B
���L�̂悤�ɁAList���^�p�����[�^���w�肹���A�����l��String�^��Int�^���i�[�����ꍇ�AList[Any]�Œ�`����܂��B
scala> val list = List("a","b",1) list: List[Any] = List(a, b, 1)
���̏ꍇ�A�v�f��C�ӂ̌^�Ŏ��o�������Ƃ��́A�ǂ���������̂ł��傤���BJava�̏ꍇ�Ainstanceof���Z�q�ł��̕ϐ��̎��ۂ̌^�ׂ���A�i�^�j�ϐ��Ƃ��邱�Ƃ��L���X�g�ł��܂��B
//Java�̏ꍇ Object o = new String("hello"); if(o instanceof String) { System.out.println((String)o); }
Scala�̏ꍇ�AAny������isInstanceOf���\�b�h���g�p���邱�ƂŁA�ϐ��̎��ۂ̌^�ׂ��܂��B
scala> list(0).isInstanceOf[Int] res16: Boolean = false scala> list(0).isInstanceOf[String] res17: Boolean = true
�uisInstanceOf[�^��]�v�Ƃ��āA���̌^���������Ă����true�A�����łȂ����false���Ԃ�܂��B�܂��A�L���X�g��asInstanceOf���\�b�h�ʼn\�ł��B
scala> list(0).asInstanceOf[String] res18: String = a
�������A�����̃��\�b�h�͎��ۂ��܂�g���܂���B�^�̊m�F��L���X�g���������ꍇ�A�A�ڑ�4��ʼn�������u�p�^�[���}�b�`�v���g���������V���v���ɋL�q�ł��邩��ł��B�܂��́A�p�^�[���}�b�`���������Ă݂Ă��������B
�@�^�p�����[�^�̎g�����͕��������̂ŁA���͌^�p�����[�^���g�p�����N���X���`���Ă݂܂��傤�B1�̌^�p�����[�^�uA�v�����A�uMySample�v�Ƃ����N���X���`���Ă݂܂��B
class MySample[A]{ var param:A = _ def get:A = param def set(param:A) = this.param = param }
�@�^�p�����[�^�́A�N���X���ƃR���X�g���N�^�����̊ԂɌ^�p�����[�^���̎w���lj����܂��B��L�̗�ł����ƁAMySample�N���X�́uA�v�Ƃ������炩�̌^�����Ƃ����Ӗ��ł��B�^�p�����[�^�̓J���}���ŁA�����ł��L�q�\�ł��B
�@�Ȃ��AScala�ɂ����Č^�p�����[�^�́AA���珇�Ԃɖ��O��t���邱�Ƃ����K�ƂȂ��Ă���悤�ł��B
�@�ł�MySample�N���X���C���X�^���X�����Ďg�p���Ă݂܂��傤�B�C���X�^���X�����ɁA[]���g�p���Č^�p�����[�^�Ɏ��ۂ̌^���w�肵�܂��B���L�T���v���ł�MySample�̌^�p�����[�^A�ɑ���String���w�肵�Ă��܂��B
scala> val x = new MySample[String] x: MySample[String] = MySample@c595bcd scala> x.set("hello") scala> x.get res5: String = hello
�@�����MySample��param�t�B�[���h��String�^�Ƃ��Ďg����悤�ɂȂ�܂��Bset���\�b�h��String�^�����悤�ɂȂ�Aget���\�b�h��String�^��Ԃ��悤�ɂȂ�܂��B
�@�^�p�����[�^��2�w�肷��N���X���unew�v�ŃC���X�^���X����ꍇ�A�����ς�������������ł��܂��B�Ⴆ�A�^�p�����[�^��2���uOR�v�Ƃ����N���X���������ꍇ�ɂ́A�N���X���𒆉��ɏ����Ă��̑O��Ɍ^�p�����[�^�������܂��B
class Collect class Error class OR[L,R] scala> new (Collect OR Error) res0: OR[Collect,Error] = OR@4ee00c09
�@OR�Ƃ����g���Z�q�h���g���Ă���悤�ɂ������܂����A���ۂɂ́uOR�v�N���X���C���X�^���X�����Ă��܂��B
�@���ɁA���\�b�h�ɑ��Č^�p�����[�^���w�肵�Ă݂܂��傤�B�N���X��g���C�g�Ɠ������A���\�b�h���^���p�����[�^���ł��܂��B���\�b�h�̏ꍇ�A���\�b�h���ƈ����̊ԂɌ^�p�����[�^���w�肵�܂��B
�@���\�b�h�̏ꍇ�A���\�b�h���ƈ����̊ԂɌ^�p�����[�^���w�肵�܂��B�\���͉��L�̂悤�ɂȂ��Ă��܂��B
def ����[A](����):�߂�l = ���{��
�@�ł́A�^�p�����[�^��1�����func���`���Ă݂܂��B���̊��͈����Ƃ��Ď�����l���A���̂܂ܕԂ������ł��B�܂��A�����̌^�͌^�p�����[�^�Ƃ��Ďw��ł��܂��B
scala> def func[A](arg:A):A = arg func: [A](arg: A)A
�@�ł́A��func���g���Ă݂܂��傤�B���\�b�h���ĂԂƂ��Ɍ^�p�����[�^���w�肵�Ȃ��Ă��A�^���_�ɂ�肤�܂����삵�Ă���܂��B
scala> func("hello") //�^���_�ɂ��^�p�����[�^��String�Ƃ��ĉ��߂���� res1: java.lang.String = hello
�@��L�̏ꍇ�Afunc[String]("hello")�ƋL�q�������ƂƓ����Ӗ��ɂȂ�܂��B
�@�Ȃ��A�^�p�����[�^���I�Ɏw�肷��ɂ́A�����̑O��[]�Ō^���L�q���܂��B
scala> func[Int](10) res2: Int = 10
�@�����ł͌^�p�����[�^���g�p�����N���X��\�b�h���`���Ďg���Ă݂܂����B�^�p�����[�^�����܂��g�p���邱�ƂŔėp�����オ������A�R���N�V������֗��Ɉ����邱�Ƃ�������܂��B���y�[�W�ł͌^�p�����[�^�ɐ�������������@�ɂ��ďЉ�܂��B
Copyright © ITmedia, Inc. All Rights Reserved.