우리는 모두 정수, 부동 소수점, 문자열 및 간헐적 10 진수 유형을 보았습니다. 가장 이상하거나 독특하거나 유용한 유형 중 유용하거나 그렇지 않은 유형은 무엇입니까?
우리는 모두 정수, 부동 소수점, 문자열 및 간헐적 10 진수 유형을 보았습니다. 가장 이상하거나 독특하거나 유용한 유형 중 유용하거나 그렇지 않은 유형은 무엇입니까?
답변:
나는 짧을 것이다 :
Maybe a
하스켈에서.
이 간단한 구성으로 언어는 충돌 문제를 해결하거나 NullPointerException
Tony Hoare의 "백만 백만 실수"를 깔끔하게 회피합니다. :)
솔직히, 선택적 존재는 컴파일 타임에 확인 되었습니까? 꿈처럼 ...
Option
이름이 마음에 들지 않는다는 것을 인정해야합니다 . 왜 안돼 Optional
! 나는 원어민이 아니기 때문에 Option
"선택적"이라는 의미를 전달하지 않습니다.
Maybe
이름은 귀엽다 "당신은 무엇을해야합니까?" "아마도 Int"입니다. 그러나 정말 깔끔한 점은 그것이 functor와 monad라는 것입니다. 일반적으로 말하면 무료로 널 전파를 의미합니다. 함수 내부 또는 코드 중간에 null 검사를 넣을 필요가 없습니다. 코드의 맨 끝에서만 확인하면됩니다.
Maybe
루비를 위한 모나드 가 있습니다 : lostechies.com/derickbailey/2010/10/10/the-maybe-monad-in-ruby
나는 매년 좋아 void *
합니다. 아마도 나에게 깊은 결함이있는 증상 일 것이다.
void *
있고 Pascal / Delphi에는 있습니다 Pointer
.
루아에는 가장 인상적인 내장 테이블 이 있습니다. 해시 테이블과 벡터가 내장되어 있으며 메타 테이블을 사용 하면 절차 언어에서 객체 지향 프로그래밍의 기본 기반이 될 수 있습니다.
테이블의 각 인덱스는 기본 언어 구조 (숫자, 부울, 문자열, 함수 -yes, 함수는 루아-및 테이블)를받을 수 있습니다.
리스프는 두 개의 흥미로운 유형을 가지고 t
와 nil
. 그들에 대해 흥미로운 것은 모든 것이 a t
이며 아무것도 없다는 것입니다 nil
.
nil
a는 t
?
포트란에는 공통 블록이 있습니다. 현대 언어에서 가장 일반적인 데이터 형식 중 하나이거나 데이터를 효율적으로 공유하는 특이한 방법입니다.
포트란 95에는 인터벌 유형 과 내장 인터벌 산술이 있습니다.
이 목록은 Haskell에서 모나 딕 유형 이 없으면 완전하지 않습니다 . 그것들을 이해하려면 약간의 노력이 필요합니다.
내가 어렸을 때 행복감 의 데이터 유형에 대해 마음에 부드러운 자리를 가졌습니다.
다음과 같이 구성됩니다.
Object
-> Atom
-> Sequence
시퀀스 = 객체 시퀀스
-- examples of atoms:
0
98.6
-1e6
-- examples of sequences:
{2, 3, 5, 7, 11, 13, 17, 19}
{1, 2, {3, 3, 3}, 4, {5, {6}}}
{{"jon", "smith"}, 52389, 97.25}
{} -- the 0-element sequence
참조 매뉴얼
참고 : "jon"은 실제로 ASCII 값 시퀀스를 작성하는 간단한 방법입니다. 예 "ABCDEFG"
와 동일{65, 66, 67, 68, 69, 70, 71}
Felix에는 익명 합계 유형이 있습니다. 유형은 다음과 같습니다.
typedef il = int + long;
이론상으로 값이 못 생겼습니다.
case 0 of il (1)
case 1 of il (2L)
아마도 같은 단위 합계를 제외하고 3 = 1 + 1 + 1
case 0 of 3
case 1 of 3
불행히도 "C 호환성"에 대한 원점 계산을 사용하지 않습니다. 구조적 유형의 대수 유형에는 다음과 같은 익명 합계가 필요합니다.
(1 + T * li) as li
(단순 적으로 링크 된) T의 목록입니다. 다른 모든 언어는 형식 자체와 생성자 모두에 이름을 지정 해야하는 필수 명목 유형 합계를 알고 있습니다.
위에서 사용 된 속기 3은 귀엽고 다음은 라이브러리에 있습니다.
typedef void = 0;
typedef unit = 1;
typedef bool = 2;
그리고이 표기법 :
T ^ 3
는 정적 길이가 3 인 배열입니다. 3은 정수가 아니라 3 단위의 합입니다. 동정 +가 연관성이없는 것은 :)
q / kdb + 에는 테이블이 내장되어 있습니다. 하나의 프로그래밍 언어 및 열 지향 데이터베이스이므로 LINQ 또는 ORM이 필요하지 않습니다.
예를 들어 다음과 같은 테이블을 만들 수 있습니다 ( 대부분의 언어 가 :
아닌 할당이 구분됨 =
).
people:([]name:`Joe`Amy`Sarah; age:17 15 18; GPA:3.5 3.8 3.33)
이제 내 테이블을 볼 수 있습니다.
q)show people
name age GPA
--------------
Joe 17 3.5
Amy 15 3.8
Sarah 18 3.33
그리고 나는 그것을 쿼리 할 수 있습니다 :
q)select from people where GPA>3.4
name age GPA
------------
Joe 17 3.5
Amy 15 3.8
C ++에서 유니온이 처음 들었을 때 '기발한'것으로 나타났습니다. 나는 그들이 구현해야 할 명백한 선택 인 시나리오에 아직 맞지 않았다.
나는 아직도 F # 및 다른 기능적 언어에서 다중 매개 변수 기능이되는 것에 대해 머리를 감싸려고 노력하고 있습니다. 기본적으로 int f (Foo, Bar) 는 func f (Foo)가됩니다.
즉, Foo를 가져 와서 Bar를 가져 와서 int를 리턴하는 두 개의 매개 변수 함수는 실제로 Foo를 가져 와서 Bar를 가져 와서 int를 리턴하는 하나의 매개 변수 함수를 리턴하는 하나의 매개 변수 함수입니다. 그러나 원하는 경우 두 가지 매개 변수를 사용하여 호출 할 수 있습니다. 나는 여기 에 대한 게시물을 썼다
f(Foo, Bar)
는 반환 할 값을 반환하는 f(Foo)
다른 함수 f'(Bar)
를 반환하는 함수 와 동일 합니다 f(Foo, Bar)
. 즉, 'Foo'인수를 수정하지만 'Bar'가 아닌 경우 'Foo'에 의존하지 않지만 여전히 'Bar'인수에 종속되는 함수가 있습니다. 이것은 기능적 언어에 일반적입니다. '카레'라고합니다.
그것들은 매우 강력하지만 컴팩트 한 물체입니다.
언어를 내장 한 언어는 텍스트를 조작 할 수있는 능력이 뛰어납니다 (구문을 잘 못 듣습니다.)
기능 패밀리의 소수의 언어에는 Unity라는 유형의 클래스가 있습니다. Unity 유형의 특징은 정보가없고 0 비트 유형이라는 점입니다. 단일 유형 (일부 변형)도 유일한 값이거나 (대부분의 다른 유형에서는) 하나의 값만 있습니다 (그 자체가 유형이 아님).
그러나 이들은 구별 유형이기 때문에 유용합니다. 하나의 단일 형식에서 다른 단일 형식으로 암시 적으로 변환 할 수 없으므로 정적 형식 검사를 사용하여 매우 효율적이고 표현적인 방식으로 작동 할 수 있습니다.
유니티는 새로운 유형이 다른 유형의 정의 된 세트 중 하나 일하거나 설명 할 수 있도록하여, 대부분의 이러한 언어 열거 형 설명하는 방법이다 어쩌면 (말의 정수) 전형적인 형태의 값이 될 수 있습니다 유형, 값을 또는 값이없는 값을 나타냅니다.
풍부한 사용자 정의 유니티 유형을 사용하지 않는 일부 언어는 여전히 어떤 형태로든 다른 형태로 통합되어 있습니다. 예를 들어, 파이썬은 적어도 세 가지 통일 유형을 가지고 NoneType
, NotImplementedType
하고 EllipsisType
. 처음 두 가지 모두 "값 없음"과 같은 것을 의미하지만, 세 번째는 복잡한 값 (특히 슬라이스 식)에서 흥미로운 특수 사례를 나타내는 데 사용됩니다.
유니티의 다른 흥미로운 예로는 NULL
SQL과 undefined
자바 스크립트가 있지만 void
C 또는 C ++ 에는 없습니다 . void
실패합니다. 정보가없는 값을 설명하지만 실제 값은 유형이 될 수 없습니다 void
.
루비의 symbol
유형은 조금 이례적입니다. 본질적으로 싱글 톤 패턴을 구현하는 문자열입니다. 또는 뭔가. 지금까지 심볼을 가장 잘 사용하는 것은 상태 추적과 함수 이름 전달에 있습니다.
코볼. 기본적으로 두 가지 기본 데이터 유형, 문자열 및 숫자 만 있지만 메모리에 배치되는 방법을 정확하게 지정해야 합니다 ( 예 :) PIC S9(5)V99 COMP-3
.
S
= 부호, 9(5)
= 5 자리, V
= 암시 적 소수점, 99
= 2 자리 이상, COMP-3
= BCD + 부호 nybble.
VHDL에는 물리적 유형이 있습니다. 이러한 유형의 리터럴에는 값과 단위가 모두 포함됩니다. 하위 단위도 정의 할 수 있습니다. 예를 들어, 사전 정의 된 물리적 유형은 time
다음과 같습니다.
type time is range <machine dependant> to <machine dependant>
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
Ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min;
end units;
연산자 오버로딩과 함께 매우 흥미로운 것을 정의 할 수 있습니다.
Clojure는 언어에 널리 퍼지는 "추상"이라는 메타 개념을 가지고 있기 때문에 흥미 롭습니다. 예 :
어느 정도까지 추상화는 " 단일 책임 원칙을 취 한다 "을 극도로 . 원하는 기능을 얻기 위해 작성하는 것은 사용자의 몫이지만, 서로 접착하는 방법에 대해 매우 유연 할 수 있습니다.
예를 들어 상속이있는 클래스 기반 OOP 시스템을 원하는 경우 이러한 핵심 추상화 중 하나를 비교적 빠르게 구축 할 수 있습니다.
실제로 추상화 자체는 여러 구현이 가능한 방식으로 설계됩니다 (예 : 시퀀스의 경우 clojure.lang.ISeq 또는 고차 함수의 경우 clojure.lang.IFn과 같은 특정 인터페이스를 통해).
이 주제에 관한 흥미로운 비디오가 있습니다 : The Art of Abstraction