나는 컴퓨터 공학을 공부하기 전에 레일스에서 많은 웹 프로그래밍을 해왔다.다이내믹 타이핑을 보완하기위한 의미없는 테스팅이 싫증이났다.
그 이후로 저는 C로 많은 학교 수업을했으며 Objective-C (Mac 관련 자료)에서 개인적인 것들을 많이했습니다. 정적 타이핑을 좋아했습니다.
하지만 지금은 전문적인 웹 개발 (프리랜싱)을해야하고 레일스를 다시 한 번 픽업했습니다. 비 의미 론적 유형 검사를 작성하는 것이 정말 귀찮다. C 및 Objective-C 컴파일러에서 무료로 가져 왔습니다. 나는 Build를 치는 것을 좋아하고 시스템이 A가 B를 호출 할 수 있음을 알기 위해 모든 코드를 검사하도록하고, B는 불분명 한 라이브러리 C 등을 호출 할 수있다. 의미론을 테스트하기 만하면된다. 하지만 Rails를 사용하면 컴파일러가됩니다. :(
는 사람이 동일한 경로를 트레드 가지고 몇 가지 제안, 또는 일부 공감을 찾고 C# 및 자바 + X 프레임 워크와 웹 개발 ASP.NET MVC에 대한 내 유일한 옵션은 ...?? P
그런데 Ruby보다는 Rails에 대한 구체적인 언급을하고 있습니다. Ruby가 스크립팅과 같은 단순한 작업에 대해 역동적 인 성격을 지니지 않았기 때문입니다.하지만 Rails는 매우 많은 보석에 의존하고 있기 때문에 보통 다른 보석 동적 타이핑이 문제가된다
감사
편집 :.!
필자는 pst의 제안을 추적하여 스칼라를 살펴 보았습니다. 언어 창작자 마틴 오더스키 (Martin Odersky)가 저술 한 스칼라에서의 프로그래밍 (Programming in Scala)을 읽으면서, 여러면에서 내 관심사와 약간을 표현한 텍스트 전체를 보았습니다. 아주 재미있는 독서.
스칼라에서 마틴 오더 스키의 프로그래밍의 52 페이지에서 촬영 :스칼라 정적 정적 타입 시스템은 가 개최 값의 종류에 따라 변수와 식을 분류
를 입력한다 을 계산하십시오. 스칼라는 유형 시스템으로 매우 정교한 정적 언어 으로 돋보입니다. 중첩 된 클래스 유형 인 Java의 부터 시작하여 유형을 제네릭으로 매개 변수화하고 교차를 사용하여 유형을 결합하고 추상 유형을 사용하여 유형의 세부 사항을 숨길 수 있습니다. 이것들은 건물에 대한 강력한 기반을 제공하고 은 자신의 유형을 구성하므로 은 동시에 사용할 수있는 안전하고 유연한 인터페이스를 설계 할 수 있습니다.
동적 언어와 같은 펄, 파이썬, 루비, 또는 그루비를 좋아하는 경우에, 당신 이 스칼라의 정적 타입 시스템의 장점 중 하나로 을 나열이 약간 이상하다는 사실을 발견했습니다. 이후에 정적 유형이 없으므로 시스템이 동적 언어의 주요 이점 인 으로 일부 인용되었습니다. 정적 유형에 대한 가장 일반적인 주장은, 프로그램이 너무 상세하게 그들이 원하는대로 자신을 표현에서 프로그래머를 방지하고, 소프트웨어 시스템의 동적 수정 불가 특정 패턴을 만드는 것이 있습니다.
그러나, 종종 이러한 인수는 일반 정적 유형의 아이디어에 대해 이동하지 않습니다,하지만 너무 자세한거나 너무 유연하지 못한 것으로 인식되는 특정 유형의 시스템에 대하여. 인스턴스의 경우, Alan Kay의 발명가 인 은 스몰 토크 언어에 대해 한 번 언급했습니다. "형식에 맞지 않지만 어떤 유형의 시스템인지는 알 수 없습니다. 완전한 고통이므로 아직 마음에 들었습니다. 동적 입력 완료 고통 "우리는되는 에서 스칼라의 타입 시스템이 훨씬 것을이 책 에서 당신을 설득 희망
" "사실, 주소 정적 타이핑에 대한 일반적인 우려의 친절이.. : 추론을 피하고 자세한 내용은 을 통해 패턴 매칭과 유형을 쓰고 작성하는 새로운 방법을 여러 개 사용했습니다. 이러한 장애물이없는 상태에서 정적 유형 시스템의 기존 이점을 더 잘 이해할 수 있습니다. 이 중 가장 중요한 것 중 의 혜택은 프로그램 추상화, 안전 리팩터링 및 입증 된 설명서의 검증 가능한 속성입니다.
검증 가능한 특성
정적 타입 시스템은 특정 런타임 오류의 없음을 증명할 수 있습니다. 예를 들어, 그들은 과 같은 속성을 증명할 수 있습니다. boolean은 결코 정수에 을 추가하지 않습니다. private 변수 은 클래스 외부에서 액세스되지 않습니다. 함수는 올바른 수의 인수에 에 적용됩니다. 문자열 만 문자열 세트에 추가됩니다.
다른 유형의 오류는 오늘날의 정적 유형 시스템에 의해 감지되지 않습니다 ( ). 인스턴스의 경우 일반적으로 종료되지 않는 함수, 배열 경계 위반 또는 0으로 나누기를 감지하지 않습니다. 또한 프로그램이 사양을 따르지 않음을 감지하지 못합니다 ( 사양이 있다고 가정하면!). 따라서 정적 유형 시스템 은 일부 에 의해 매우 유용하지 않은 것으로 해산되었습니다. 인수 유형이 인 경우 이러한 유형 시스템은 은 단순 오류 만 탐지 할 수 있지만 단위 테스트는 더 광범위한 범위를 제공하지만 왜 정적 유형 을 사용해야합니까?
우리는이 논점들이 포인트가 이라고 생각합니다.정적 유형 시스템은 확실히 단위를 대체 할 수는 없지만 단위를 처리하여 필요한 단위 테스트 수를 줄이면 테스트해야합니다. 마찬가지로, 단위 테스트 정적 입력을 바꿀 수 없습니다. 어쨌든 Edsger Dijkstra가 말한 것처럼 테스트는 오류의 존재를 증명할 뿐이며 결코 부재 할 수 있습니다. 따라서 은 정적 입력이 이 단순 할 수 있음을 보장하지만 실제로는 형식의 보증을 제공하지 않고 테스트를 제공 할 수 있습니다.
안전 리팩토링
정적 타입 시스템은 당신이 높은 신뢰도와 코드베이스를 변경 할 수있는 안전망을 제공합니다. 메서드에 매개 변수를 추가하는 리팩토링을 예로 들어 보겠습니다. 정적으로 유형화 된 언어에서 변경을 수행 할 수 있습니다. 시스템을 다시 컴파일하고 유형 오류의 원인이되는 모든 행을 으로 수정하면됩니다. 이 작업을 끝내면 은 을 변경해야하는 모든 장소를 찾았습니다. 같은 많은 다른 간단한 리팩토링은 메서드 이름을 변경하거나 메서드를 한 클래스에서 다른 클래스로 이동하는 것과 마찬가지입니다. 모든 경우에 정적 유형 검사 은 새로운 시스템이 이전처럼 작동한다는 충분한 보증을 제공합니다.
문서
정적 유형 정확성에 대해 컴파일러에서 체크 프로그램 설명서 있습니다. 일반 주석과 달리 유형 주석은 날짜를 벗어날 수 없습니다 (적어도 소스 파일이 최근에 컴파일러를 통과 한 경우는 제외). 또한 컴파일러와 통합 개발 환경 은 더 나은 컨텍스트 도움말을 제공하기 위해 에 유형 주석을 사용할 수 있습니다. 예를 들어, 통합 된 개발 환경은 선택이 만들어 해당 유형의 모든 구성원을 찾는 되는 식의 정적 유형을 결정 하여 선택 가능한 모든 멤버를 표시 할 수 있습니다.
Rails를 개발할 때 이러한 유형의 테스트가 필요한 이유를 보여주는 예가 있습니까? – zetetic
zetetic : 레일의 자체 테스트 스위트는 데프 assert_raise (하면 ArgumentError) {계정을 test_count_with_too_many_parameters_raises https://github.com/rails/rails/blob/master/activerecord/test/cases/calculations_test.rb로 inumerous 예를 가지고 .셀 (1, 2, 3)} 단부 https://github.com/rails/rails/blob/master/activerecord/test/cases/associations_test.rb DEF test_include_with_order_works assert_nothing_raised {Account.find (첫째 : order => 'id', : include => : firm)} assert_nothing_raised {Account.find (: first, : order => : id} : 포함 => : 회사)} 끝 – Alexandre
아무도 글을 쓰려고 시도하지 않았습니까? F #과 ASP MVC? – Gabe