스칼라 언어 연구 노트 - 방법, 기능 이상

1.Scala 방법 및 기능의 차이
 ① 스칼라 방법은 기능과, 둘 사이의 의미 적 차이는 작다. 스칼라있어서, 상기 클래스의 부분이며, 물체의 함수의 변수에 할당 될 수있다. 즉, 기능이 클래스에있어서 정의되어

 유사한 방법 ② 스칼라 자바, 방법은 클래스의 조성물의 일부

 이 기능은 ③ 스칼라 완전한 개체입니다, 기능 스칼라는 사실, 개체 형질의 클래스를 상속

 ④ 스칼라 발은 문은 정의 함수를 사용하여 DEF 문은 메서드와 함수를 정의

{테스트 클래스
DEF 방법 (X : INT) 3 + X =.
브로 = 기능. (X : INT) = X + 3>
}
2.Scala 방법
선언 구문 방법 ①

   기본 구문

      데프 메소드 이름 ([매개 변수 이름 : 매개 변수 유형], ...) [[: 반환 값 형식] =] {

          문 ...

          반환 반환 값

     }

    정의 : 물품 = {}와 개수에있어서 본체와 동일하지 않는 경우, [] 그의 종류는 추상적이며 또한 포함하고,이 방법은 암시 적 (추상) 선언 존재가되거나되지 않을 수 대안 나타낸다 유형

    1) 방법 선언 키워드 DEF (정의)

    2) [매개 변수 이름 : 매개 변수 유형], ... : 그 함수의 매개 변수 목록, 당신은 할 수 없습니다. 쉼표로 구분하여 복수의 파라미터가 있으면

    문 3)에있어서, 순서대로 특정 기능 블록을 달성하는 것을

    4) 값을 리턴 할 수있는 방법은 없다 수도

    5) = 형태 : 반환 값 형식의 값 1을 반환  

getRes DEF (N1 : INT, N2 : INT, 오퍼 : 샤아) 지능 = {
N1 + N2
}
    6) 반환 값 형태 2 :. 리턴 값 유형 = 타입 추론 완료하여 불확실성을 나타낸다

DEF getRes (N1 : INT, N2 : INT, OPER : 샤아) 지능 = {// 메소드 선언의 리턴 값 : 지능
IF (오퍼 == '+') {
N1 + N2
}는 다른 IF (오페라 == ' - ') {
N1 - N2
}는 다른 {
널 (null) // 실행 오류
}
}
    참고 : 널 (null)이 AnyRef의 서브 클래스이지만, 널 (null)이 AnyVal의 서브 클래스가 아니기 때문에, 여기에 컴파일러는 불평하지 않지만, 실행은 TypeError 예외가 아닌 경우를보고됩니다 널 돌아가, 방법은 값을 반환 할 수 지능 직접 제거 숫자 타입 추론 스칼라 자동 복귀 할 것이다 =

    7) 3의 형태로 값을 반환 : 더 리턴 값이 없음을, 반환이 적용되지 않습니다

getRes DEF (N1 : INT, N2 : INT, 오퍼 : 샤아는) {
정상적으로 실행 N1 + N2 // 코드를 반환하지만, 효과 리턴을지지 않습니다
}
    에는 반환이없는 경우, 반환 값으로 결과의 마지막 행에 기본을 수행하는 데 8)

② 방법 참고

 상기 방법은 형식 매개하지 않고, 호출되지 않을 경우 1) 파라미터의리스트 (), 복수의 방법 일 수있다

 파라미터 값 2) 목록과는 값 타입과 참조 타입이 될 수있는 데이터 형식의 목록을 반환

 3) 스칼라의 방법은 코드 법 체 자체의 마지막 라인에 따른 유형 추정 방법을 리턴 할 수있다. 따라서이 경우, 반환 키워드는 생략 할 수 있습니다

 4) 인 경우 복귀 키워드 생략되어, 반환 값 유형이 생략 될 수 있도록 스칼라 자체를 추정 할 수 있기 때문에

 이 방법은 명시 적으로 반환 키워드를 사용하는 경우 5), 그 방법은 추론이 독자적으로 사용할 수 없습니다 반환이 시간이 명확하게 작성하기 : 리턴 유형 = 물론, 당신도 반환 값 리턴으로, 아무것도 기록하지 않는 경우 ()

DEF getSum (N1 : INT, N2 : INT) = {// = 번호가 생략 될 수없고, 생략하는 경우가 더 반환 값 RES 얻는다 () 의미
N1 + N2
}
 없음 리턴 값 방법은 명시 적으로 선언하지 않는 경우 6) (. 문 단위), 심지어 반환 키워드 다음 메소드 본문은 반환 값이 없습니다

 명확한 방법은 값 또는 불확실한 반환 형식을 반환하지 않는 경우 7), 반환 값 유형은) 생략 (또는로 선언 할 수있다

 8) 신택스 구조의 상관이 중첩 될 수있는 구문 스칼라 다른 신택스 구조 (유연성), 즉 : 상기 방법은, 상기 방법은 다음 선언 수도 클래스가 클래스를 재 선언 될 수 있고, 방법을 정의 / 선언 할 수 / 정의 방법

{TestDef 개체
DEF 메인 (인수 : 배열 [문자열]) : 단위 = {
// sayHello가 정의 주요 기능 재 작성 / 메소드
는 def의 sayHello (상품명 : 문자열) 문자열 = {
는 def의 sayHello (상품명 : 문자열) 문자열 = {
+ 이름 "안녕하세요"
}
의 sayHello (명)
}
VAR = R은 k의 sayHello ( "테리")
println 메소드 ( "R & LT ="+ R & LT) = R & LT 테리 헬로 //
}
}
 매개 변수 선언. 9) 파라미터 스칼라있어서, 인수 지정하지 않으면 직접 초기 값 (초기 값)를 할당하고 상기 방법은, 디폴트 값을 호출한다. 인수가 지정되면, 실제 참가자의 기본값 커버

{테스트 개체
DEF 메인 (인수 : 배열 [문자열]) : 단위 = {
println 메소드 (SAYOK ())
println 메소드 (SAYOK ( "톰")) // 기본이 덮여
}
DEF SAYOK (이름 : 문자열 = "잭") : = {문자열
반환 이름 + "OK!"
}
}
끝이 디폴트 값을 대체하기 위해 매개 변수를 전달 10) 여러 방법 매개 변수가있는 경우, 각 매개 변수 값을 설정할 수 있습니다,이 시간은, 기본 값으로 할당되지 않은 파라미터 결정되지 (기본 선언 순서 [왼쪽에서 오른쪽). 이 경우, 파라미터 이름으로 사용될 수있다

/ **
* @author huleikai
* @Create 2019년 5월 17일 11시 56분
* /
개체 TestDefArgs {
DEF 주 (인수 : 배열 [문자열]) : 단위 = {
mysqlCon () // 매개 변수의 디폴트 값을 통과하지 못한 사용하는
mysqlCon ( "127.0.0.1", 8080) // 기본 주문 대응 커버에 의해 매개
mysqlCon (PWD = "123456") // 기본값 피복 사용할 파라미터 이름
}

DEF의 mysqlCon 추가 (: STRING = "로컬 호스트"포트 : INT = 3306,
사용자 : 문자열 = "루트", PWD : 문자열 = "루트") : 단위 = {
println 메소드 ( "추가 ="+ 추가)
println 메소드 ( "포트 ="+ 포트)
println 메소드 ( "사용자 ="+ 사용자 )
println 메소드 ( "PWD ="+ PWD)
}
}
 . 11)이 형성 스칼라있어서 디폴트 파라미터를 발하고, 따라서 공정에서 수정할 수없는

 결과 유형에서 유추 할 수없는 재귀 적 방법을 수행하지 않은) 12 전에 사용 명확한 반환 형식이 있어야합니다

 13) 스칼라 방법은 매개 변수를 지원

SUM DEF (인수 : 지능 *) = {} 지능
3.Scala 기능
    함수와 실질적으로 동일한 방법이지만 스칼라는 함수의 개념은 더 중요하고 광범위하고 유연하다.

  함수의 정의를 ①

   유사한 방법은 규칙을 정의합니다 :

데프 ABS (X : 더블) = 경우 (x> 0) X 다른 -x
  함수 재귀 기능하지 않는 경우에는, 스칼라 반환형이 식에 의해 추론 될 수있다 = 백. 함수가 재귀 그러나, 일단, 당신은 지정된 반환 값의 유형을 표시해야합니다

RES DEF (N- : INT) :.. (1-N-) 지능 IF = N- (<0) 1 다른 N-RES *를
  ② 익명 함수

   스칼라 익명 함수 정의 문법은 오른쪽 함수의 본체이고, 왼쪽 화살표 파라미터리스트이며, 매우 간단하다. 익명 함수를 사용한 후, 우리의 코드를보다 간결.

   다음 식 지능 익명 함수의 파라미터를 받아 입력의 종류를 정의한다 :

(: INT, X = 브로 추가 => X + Y : INT Y)
  사실, 이러한 접근법은 다음의 약어이고, 상기 정의 된 익명 함수 :

기능 1 새로운 새의 DEF = [INT, 지능 추가] {
; DEF 적용 (: 지능 X) = X + 1을 지능.
}
 사용할 수있는 추가 함수로서 다음과 같이 사용 :

에 println (ADD (3, 4) )
 는 다음과 같이 우리는 익명 함수 파라미터에 제공되지 않을 수있다 :

발 emptyFunc = () => { 에 println ( "안녕하세요 스칼라!")}
 우리는 말했다 위에 당신이 경우에는 매개 변수 목록을 방법이없는 경우, 당신은 메소드 이름을 직접 쓸 수 호출 할 수 있지만, 인수없는 익명의 함수 호출 괄호 () 가져

에 println은 (emptyFunc는 ())
에있어서, 상기 사용 및 기능 상호
    자체가 실제로 형질 개체 상속되는 함수를, 이는 자바 지정 방식에 대응, 문제없이 파라미터 질량 참여 자연스러운 방법으로 작동 할 송신 파라미터로서 학생 클래스 오브젝트가 함수에있어서의 파라미터로서 전달 될 수 있고, 함수의 매개 변수로 전달 될 수있다

  

   이 과정 자체가 직접 매개 변수로 사용될 수 없지만 들어오는 매개 변수 유형은 메서드 또는 함수에서 메서드 매개 변수의 조건을 충족하는 경우, 더 대중 참여의 함수로 변환 할 수 있습니다, 다음 컴파일러 스칼라의 기본 기능은 전송 방법을 변환하는 입력

  

  아래와 같이 물론,이 방법은 또한, 상기 방법의 함수로서 메소드 이름 + _ + 공간 변환을 사용할 수있다 :

  

예외의 5.Scala 예외
 ① 스칼라 예외 처리로서는

{은 try
발은 NUM = 10/0
{캐치}
: ( "예외가 0으로 산술 부문을 캡처") arithmeticexception이 => println 메소드는 케이스 EX는
케이스 EX를 : 예외 => println 메소드 ( "예외 캡처")
}는 마지막으로 {
// 마지막을 코드를 실행할
println 메소드 ( "스칼라 최종적으로 ...")
}
② 사용자 정의 예외 클래스 스칼라을

   스칼라에서, 당신은 당신의 자신의 예외를 만들 수 있습니다. 또한 사용자 정의 예외로 알려져있다. 예외 클래스를 확장하고, 사용자 정의 예외 클래스를 선언함으로써. 클래스의 사용자 정의 예외 메시지를 작성합니다. 의 예를 살펴 보자 :
 

//声明一个异常类继承예외
클래스 InvalidAgeException (들 : 문자열) 예외 (들) {} 확장

클래스 ExceptionExample {
@throws (classOf은 [InvalidAgeException])
: {데프 (INT 세) 검증
(나이 <18) {경우를
새 던져 InvalidAgeException ( "자격이되지 않음")
} 다른 {
에 println은 ( "당신은 자격이 있습니다")
}
}
}

객체 데모 {
데프 주 (인수 : 배열 [문자열]) {
var에 전자 = 새로운 ExceptionExample ()
{시도
e.validate을 (5)
캐치} {
케이스 E : 예외 =>에 println ( "예외가 발생했습니다"+ E)
}
}
}
③ 스칼라异常处理总结

  1) 스칼라 비정상적인 작동 메커니즘과 자바,하지만 스칼라 선택하지 않은 (즉, 런타임에없는 특이한 개념 스칼라 컴파일러, 예외 캡처하는 과정 예외) 컴파일

  2) 키워드 던져를 사용하여 예외 객체를 throw합니다. 모든 예외의 Throwable의 서브 타입이다. 의 유형을 필요한 곳에 사용할 수 있습니다 아무것도 모든 유형의 하위 유형이 없기 때문에, 그것은 아무것도 아니다, 입력 된 표현을 던져, 그렇게 표현을 던져

메인 DEF (인수 : 배열 [문자열]) : 단위 = {
브로 RES = 시험 ()
println 메소드 (res.toString)
}
DEF 테스트 () = {아무것도
드로 새로운 새로운 예외 ( "이상")
}
  3) 스칼라 , 이상 매치의 패턴 매칭을 수행하는 개념을 차용 따라서, 캐치 블록의 경우 절 일련의 대응하는 예외와 일치하는 것이다. 유사 자바 스위치 케이스 X : 코드 블록

  예외가 발생하면 같은 다른 언어 4) 이상 포착기구, 캐치 절 순차 캡처한다. 따라서, 캐치 절에,보다 구체적인 예외 에치젠 후 이상으로 더 많은, 더 많은 인기에 의존, 이전의 일반 예외 작성하는 경우, 또한 스칼라에서 오류없이 게시물에 특정 예외를 쓰기 그러나 이것은 아주 나쁜 프로그래밍 스타일이다

  5) 스칼라는 예외를 선언하는 키워드를 제공 던진다. 당신은 이상한 문을 정의 된 방법을 사용할 수 있습니다. 그것은이 예외 정보를 던질 수있다이 방법의 호출 할 수있는 기능을 제공한다. 이 함수 코드가 처리에 포함되어 전화를 시도-catch 블록을 비정상적인 프로그램 종료를 방지하기 위해 도움이 될 수 있습니다. 스칼라에서는 선언 주석을 사용하여 예외가 발생 할 수 있습니다

메인 DEF (인수 : 배열 [문자열]) : 단위 = {
F11 ()
}
@throws (classOf [NumberFormatException이]) //等同于NumberFormatException.class
DEF F11 () = { "ABC".toInt}
 
----- ---------------- 

추천

출처www.cnblogs.com/ly570/p/10947719.html