중위표현식과 메시징을 같은 문법으로 표현하고 싶은데요.
jong10ruby에서의 1+2 는 1.+(2) 와 같죠. io에서는 1 +(2) 와 같고요. 원래는 괄호를 쓰지만, 수식에서만 syntax sugar인가봐요. 전 괄호도 없애고 싶어서.. 생각을 조금 해봤는데요.
보통, 메소드를 동사로 많이 구분하잖아요? 영문법에서, SVO 로 생각해보면,
anObject.aMessage(파라미터) 라는 코드는,
anObject : 주어
aMessage : 동사
파라미터 : 목적어
가 될 것 같네요.
<A> student.drink(beer)
<B> student drink beer
대부분 A스타일로 표현되는 코드를 B스타일로 쓰면 어떨까 하고 생각해 봤어요. 이게, 파라미터가 한개일땐, 영어문장과 비슷한데, 여러개면, 콤마나 띄어쓰기로 구분이 필요하더라고요.
<B-1> student drink beer, water
<B-2> student drink beer water
이런 두가지 방법이 있겠죠. 중간에 콤마가 나오면 이상하니깐, B-2 가 괜찮을 것 같고요. 눈으로 보기에 잘 구분이 안 가니깐, 메소드를 대문자로 시작해야 하고, 변수는 소문자로 해야한다고 강제할 수도 있겠네요. erlang은 변수를 대문자로 시작한다고 강제하잖아요. 컨벤션을 강제하는 것도 나쁘지 않다고 생각해요.
<A> student.drink(beer, water)
<B-3> student Drink beer water
이걸 주변 사람들 몇명에게 물어봤더니, 어렵(?)다고 하네요. ㅠㅠ 기존의 A스타일이 B-1, B-2, B-3 스타일보다 눈에 훨씬 잘 들어온다고. (학습된 이유도 있긴 하겠지만요.). 에디터에서 syntax highlighting이 된다면, (주어/동사/목적어의 색깔을 달리 한다면) 그렇게 나쁘지만은 않을 것 같긴 한데.. 어떤가요?
이렇게 하는 것의 장점은, 중위표현식을 같은 문법으로 표현이 가능하다는 거죠. Syntax Sugar 없이.
즉, 1 + 2 라는 중위표현식은,
1 : object(리시버, 주어)
+ : 메소드(동사)
2 : 파라미터(목적어)
..인거죠. ruby에서 실제로는 1.+(2) 인 것과, io에서 실제로는 1 +(2) 인 것과 다르게요. student Drink beer water 와 같은 파서로 처리할 수 있겠죠. 물론, 파라미터가 2개 이상이면, 1 + 2 3 이렇게 되서 곤란하겠지만, + 메소드에서, 파라미터를 하나만 받기로 하면 상관 없겠죠.
근데, 흠.. 가만 보면, 그냥 단지, 주어만 달린 Lisp 같기도 하고, 주어나 동사나 목적어에, 다른 expression이 들어온다면, 괄호가 필요할 수 밖에 없고.. 좀 애매하긴 해요. 단지, 중위표현식과 메시징을 이쁘게 같은 문법 안에 넣고 싶을 뿐인데, 잘 안되네요.
..... 정말 이상한가요?; 뭔가 괜찮은 방법 없을까요.
제 눈에는 괜찮아보이는데요? Lisp으로 만들어보세요.
제 눈에는 B-1 이 제일 좋아보이는 듯...
메소드/클래스/타입이 first class일 경우를 생각한다면 어떻게 될까요. 또 사칙연산의 우선 순위를 결정하는 부분도 고려해봐야 할 것 같네요.