크리스토는 두더지의 첫눈에
14760 단어 codenewbiegorubycrystal
🏷 정적 유형
🐹 병발처럼.
🚀 컴파일 언어로서의 빠른 이진 파일
💎 Ruby 만족스러운 문법
Go에서 왔습니다. 저는 5년 동안 일했습니다. 크리스탈이 이런 기능을 가지고 있다고 들었는데 한번 시도해 봐야겠어요!그래서 두더지가 보는 수정을 구경시켜주고 싶어!
🐣 프로젝트 시작
물론 크리스탈을 다운로드한 후 첫 번째 단계는 프로젝트를 실제로 시작하는 것이다.이를 위해 크리스탈에서 프로그램을 생성하는 데 사용되는 명령
crystal init
과 코드 라이브러리를 생성하는 데 사용되는 두 개의 하위 명령app
이 있다.그래서 나는 내 프로그램을 실행하기 시작했다.crystal init app first-app
나는 즉시 네가 이 명령에서 얼마나 많은 것을 얻었는지 알아차렸다.당신은 이런 결과를 얻게 될 것이다.lib
은 처음부터 노드에서 프로젝트의 중심 목록으로 보이는 것과 유사하다.shard.yml
디렉터리입니다.package.json
디렉터리도 있다.🏗 프로젝트 만들기
우리는 이미 수정 서류 한 부를 준비했으니
src
로 전화해서 보십시오.# TODO: Write documentation for `First::App`
module First::App
VERSION = "0.1.0"
# TODO: Put your code here
end
루비에서'print'는'put'(put S)이라는 뜻이기 때문에 Hello World 프로그램을 출력하는 기능을 시도해 봅시다. module First::App
VERSION = "0.1.0"
- # TODO: Put your code here
+ puts "Suplol, world!"
end
그리고 크리스탈 명령을 통해 spec
실행할 수 있습니다. Go에 프로그램이 있으면 src/first-app.cr
를 사용하여 실행할 수 있습니다.Suplol, world!
그나저나 Go나 C와 같은 언어가 가진 주요 기능은 없다는 점에 유의하시기 바랍니다.반대로 우리는 crystal run src/first-app.cr
를'주 코드'로 호출할 것이다here.그러나 Crystal 파일을 하나만 실행하기보다는 바이너리 파일로 변환해야 합니다.Go 패키지에서 우리는
go run main.go
패키지에 바이너리 파일을 구축하거나 puts
생성된 바이너리 파일을 설치하는 등 몇 가지 일을 할 것이다.크리스탈에서는 go build
를 사용하여 파일에서 프로젝트를 구축할 수 있지만, 프로젝트에서 크리스탈의 패키지 관리자 go install
를 사용하여 프로젝트를 구축할 수 있습니다. (자바스크립트의 npm/Thread와 유사합니다.)다음 명령을 실행합니다.shards build
이제 crystal build
디렉터리를 보아야 합니다. 그러면 shards
메시지를 인쇄하기 위해 실행할 수 있습니다.너는 더 많은 기능
bin
을 볼 수 있다here.👀 표준 라이브러리 보기
Go와 유사하게 크리스탈은 커다란 standard library 인터페이스를 가지고 있어 많은 일을 할 수 있고 의존항을 설치할 필요가 없다!여기에 문자열과 입출력을 처리하는 코드, JSON 서열화 모듈, 그리고 상자를 열면 바로 사용할 HTTP 서버가 있습니다.
그래서'나무늘보'라는 단어가 포함되면 빨간색 문자열을 출력할 수 있는 프로그램을 만들어 보자. 나무늘보는 부용화를 좋아하기 때문이다.우리가 해야 할 첫 번째 일은 문자열이 단어를 포함하는지 확인하는 것이다.Go에서 문자열이 느린지 확인하는 함수를 만들려면 다음과 같이
./bin/first-app
패키지를 사용합니다.package main
import (
"strings"
)
func isSlothful(s string) bool {
return strings.Contains(s, "sloth")
}
Crystal docs의 탐색기를 스크롤하면 제목이 String인 부분을 볼 수 있습니다.그러나 Go의 문자열 패키지처럼 패키지가 아니라 유형입니다.크리스탈에서는 모든 종류, 심지어 문자열까지 방법이 있다.따라서 크리스탈에서 스트링 패키지는 스트링 유형으로 효과적으로 정의되는 방법!String 페이지의 내용은 String 패키지의 Godoc와 유사하며 패키지와 그 방법을 보여 줍니다.
shards
방법이 많아요!우리가 원하는 것은 includes?인데 그 작업 원리는 Go의 strings
와 유사하다.def includes?(search : Char | String)
함수 서명String
은'연합 유형'또는'아니면 유형'으로 문자열이'a'와 같은 문자를 포함할 수도 있고'sloth'와 같은 전체 문자열을 포함할 수도 있음을 나타낸다.나는 이런 유형이 매우 편리하다는 것을 발견했기 때문에 같은 함수는 유사한 유형에 사용할 수 있다.한번 시험해 보기 위해서, 우리는 자신의
strings.Contains
함수를 정의할 것이다.반환Char | String
및 이 메서드를 is_slothful
모듈에 추가합니다. def self.is_slothful?(s: String)
s.includes? "sloth"
end
우리는 정의된 함수에self 접두사를 붙여서 first-app.cr
First::App
모듈의 class method로 만들었다.또한 우리는 문장을 되돌릴 필요도 없고
is_slothful?
의 매개 변수 주위에 괄호를 붙일 필요도 없다는 것을 주의하십시오.이것은 마치 루비에 있는 것과 같다.함수 호출 중의 괄호는 잘못된 뜻을 해결하는 데만 사용되며, 함수에 되돌아오지 않으면, 되돌아오는 값이 마지막 문장의 계산 결과입니다.이 방법을 사용하려면
First::App
를 includes?
로 바꾸십시오.그리고
puts "Suplol, world!"
를 사용하여 다시 컴파일합니다. 바이너리 파일을 실행할 때'false '를 인쇄해야 합니다.그것을'슈퍼 게으른 세상'으로 바꾸자!진짜는 인쇄해야 한다.📋 테스트 범위 증가
Go에 대해 내가 가장 좋아하는 것은 Go 명령행 프로그램에
puts is_slothful? "Suplol, world!"
하위 명령이 있기 때문에 의존항이 없는 상황에서 자동으로 테스트할 수 있다는 것이다.크리스탈도 shared build
를 사용하여 이 점을 실현했고 test
디렉터리의 모든 테스트를 실행했다.다행히도, 우리가 crystal spec
로 우리의 프로젝트를 제작한 이래로, 우리는 이미 규범 목록을 만들었다.이동 spec
:require "./spec_helper"
describe First::App do
# TODO: Write tests
it "works" do
false.should eq(true)
end
end
이 테스트를 crystal init
사용하면,false가true와 같지 않기 때문에 테스트가 실패합니다.우리의 새로운
spec/first-app_spec.cr
방법에 대해 시험해 봅시다.만약 우리가 바둑에서 테스트를 한다면 다음과 같을 것이다.func TestIsSlothful(t *testing.T) {
if !isSlothful("Suplol, slothful world!") {
t.Error(`"Suplol, slothful world!" was considered non slothful`)
}
}
크리스탈에 우리는 없다crystal spec
.반대로, 우리는 is_slothful?
블록을 사용하여 테스트 용례를 정의하고, 예를 들어 루비의 RSPec과 자바스크립트의 Jest와 같은 진정한 단언을 작성합니다.따라서'게으른지'에 대한 테스트는 다음과 같다. it "detects when a string is slothful" do
First::App.is_slothful?("Suplol, world!").should be_false
First::App.is_slothful?("Suplol, slothful world!").should be_true
end
초기testing.T
블록에서 벗어나 운행it
하면 우리의 테스트는 통과될 것입니다!그러나 이 테스트 용례에 예시를 하나 더 추가하자.First::App.is_slothful?("Sloths for the win!").should be_true
소문자 s가 있는 문자열'sloths'를 찾고 있기 때문에 저희 코드는 대문자 s'sloths for the win!'을 고려하지 않았습니다.밧줄이 게으르다.우리가 이 문제를 해결합시다!문자열 패키지의 문서를 보려면 문자열을 모두 소문자로 만들 수 있는 방법이 있습니다.
def downcase(options : Unicode::CaseOptions = :none) : String
우리는 이 방법으로 문자열을 모든 소문자로 변환할 수 있으며, 심지어는 a it works
를 입력해서 대문자와 소문자를 사용하는 규칙을 표시할 수도 있다.다음과 같은 방법crystal spec
방법을 사용하겠습니다. def self.is_slothful?(s : String)
- s.includes? "sloth"
+ s.downcase.includes? "sloth"
end
운행CaseOptions
, 테스트는 지금 통과해야 합니다!🌺 양홍색을 가져오너라!
현재, 우리는 문자열이 게으른지 아닌지를 측정하기 위해 함수를 사용했습니다. 따라서 문자열이 게으른지 다시 정의합시다.Go에서 텍스트를 다시 음영처리하면 텍스트를 다시 음영처리하기 위한 표준 라이브러리 패키지가 없으므로 문자열에 ANSI 이스케이프 코드를 제공하거나 Fatih Arslan
is_slothful
패키지를 가져올 수 있습니다.func printIfSlothful(s string) {
if isSlothsul(s) {
color.Magenta(s)
} else {
fmt.Println(s)
}
}
크리스탈에서 착색 기능은 사실상 표준 라이브러리colorize module의 한 모듈이다!그것을 가져오면 대상 유형에 crystal spec
방법을 추가합니다. 모든 유형이 이 대상 유형에서 계승됩니다.이것은 숫자, 문자열, 그리고 더 복잡한 유형을 모두 이런 방법으로 여러 가지 색으로 표시할 수 있다는 것을 의미한다.가져오고
color
모듈의 colorize
방법에서 시도해 봅시다.첫 번째 응용 프로그램 중 상위권에 랭크되어 있다.cr, 이 줄을 더하기:require 'colorize'
그런 다음 다음 다음 코드를 사용하여 이 방법을 구현합니다. def self.magenta_if_slothful(s : String)
if is_slothful? s
s.colorize(:magenta)
else
s
end
end
만약 우리의 문자열이 slothful이 아니라면, 터미널의 기본 텍스트 색을 출력하기 위해 원래의 문자열만 되돌려줍니다.그러나 만약 그것이 느리다면, 우리는 print_if_slothful
다시 색칠한 문자열을 되돌려주고, 색을 선택합니다. 우리는 수정symbol을 사용합니다. 이것은 문자열처럼 유일한 이름이 되기 위한 것입니다.이제 이거 한번 해보자.이전
First::App
호출을 제거하고 다음 코드 행을 추가합니다. puts magenta_if_slothful "Suplol world!"
puts magenta_if_slothful "Suplol slothful world!"
puts magenta_if_slothful "Sloths rule!"
s.colorize
를 실행하고 생성된 바이너리 파일을 실행하면 터미널의 기본 색으로 인쇄된 앞의 두 줄과 빨간색으로 인쇄된 마지막 두 줄을 받을 수 있습니다!🦥🌺지금까지 크리스탈을 시도해 본 적이 없다. 비록 나는 이전에 루비 시리즈 언어에 대해 많은 연구를 하지 않았지만 지금까지 이 언어를 좋아했고 고와 루비에서 알게 된 많은 것들이 이 새로운 언어에 잘 계승되었다는 것을 발견했다.우리는 표면에 거의 닿지 않았지만, 만약 당신이 재미있는 새로운 언어를 찾아 시도하는 두더지라면, 나는 당신이 수정을 가지고 한 바퀴 도는 것을 건의합니다.
Reference
이 문제에 관하여(크리스토는 두더지의 첫눈에), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/andyhaskell/a-first-look-at-crystal-as-a-gopher-2llf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)