Skip to content

Instantly share code, notes, and snippets.

Kota Mizushima kmizu

Block or report user

Report or block kmizu

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@kmizu
kmizu / test.md
Last active Aug 20, 2019
Markdown in Markdown
View test.md

A1

# A2

```markdown

# A3
@kmizu
kmizu / console.txt
Created Aug 10, 2019
Nullability in Nice (0.9.13)
View console.txt
[Mizushima]$ cat hello1/hello1.nice
import java.util.*;
void main(String[] args) {
let value = System.getProperty("hello");
assert value != null;
System.out.println(value.length());
}
~/work
@kmizu
kmizu / diary.txt
Created Aug 8, 2019
2004/09/09の自分のWeb日記
View diary.txt
以前にちょっとだけ触ってみたNiceについて調べてみる。  Niceは、Javaをベースに高階関数、マルチメソッド、パラメータ型、キーワード引数、省略可能引数、Option Typesなどの機能を追加した言語で、処理系は、Java VM用のコードを吐くコンパイラとなっている。
マルチメソッド、キーワード引数などは、他の言語でもよく見かけるが、 Option Typesは、他の言語ではあまり見かけない機能だ。Option Typesとは、値としてnullを許す型で、それだけ見ると、珍しくもなんともないのだが、Niceでは面白いことに、変数の型はデフォルトでnullを代入できないのだ。例えば、以下のようなコードを書くと、sはnullを代入できない型になり、もしsにnullが代入され得るようなコードを書くと、コンパイルエラーになる。
let String s = "Hello";//nullは代入できない
もし、nullを代入可能にしたければ、型名の頭に'?'を付けて、次のように宣言する。
let ?String s = "Hello";//nullが代入可能
この機能は、大変面白い機能なんじゃないかと思う。例えば、Mapにキーを与えて値を取得するとき、返って来た値がnullかどうかをチェックする必要がある場合は多いが、この機能があれば、もし仮にnullかどうかのチェックを忘れたとしても、コンパイルエラーになってくれる。
View StringLiteralType.scala
object StringLiteralType {
def isAType(arg: String): Unit = arg match {
case _ : "a" => println("This is `a` type")
case _ => println("not `a`")
}
def a1 = isAType("a")
def a2 = isAType(new String("a"))
def a3 = new String("a").isInstanceOf["a"]
View StringLiteralType.scala
object StringLiteralType {
def isAType(arg: String): Unit = arg match {
case _ : "a" => println("This is `a` type")
case _ => println("not `a`")
}
def a1 = isAType("a")
def a2 = isAType(new String("a"))
def a3 = new String("a").isInstanceOf["a"]
View javap.txt
public class LargeStringInterpolation {
public int a();
Code:
0: aload_0
1: getfield #15 // Field a:I
4: ireturn
public java.lang.String s33();
Code:
0: aload_0
View LargeStringInterpolation.scala
object LargeStringInterpolation extends App {
val a = 1
val s32 = s"$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a"
val s33 = s"$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a"
val s34 = s"$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a"
val s35 = s"$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a$a"
println("Hello")
}
View A.scala
class A {
def foo(x: Int): Int = 1
}
@kmizu
kmizu / BehaviorOfFinal.scala
Last active Jul 12, 2019
Effect of explicit final modifier for an object definition (it depends on scalac's implementation detail)
View BehaviorOfFinal.scala
final object ExplicitlyFinalObject {
val NonFinalVal = 1
final val FinalVal = 2
}
object ImplicitlyFinalObject {
val NonFinalVal = 1
final val FinalVal = 2
}
@kmizu
kmizu / M.hs
Created Jul 8, 2019
Ambiguous occurrence
View M.hs
class M a where
(+) :: a -> a -> a
add x y = x + y
main = do print "Hello"
You can’t perform that action at this time.