Scalaの言語の研究ノート - メソッド、関数および異常

1.Scala方法と違い機能
 ①Scalaの方法は、機能を有し、両者の間のセマンティックの差が小さいです。Scalaの方法は、クラスの一部であり、オブジェクトの機能は、変数に割り当てることができるされています。換言すれば、関数は、クラスメソッドで定義されています

 同様の方法②スカラは、Javaで、メソッドは、クラスの組成物の一部であります

 関数は③Scalaは完全なオブジェクトである、機能Scalaは実際には、対象形質のクラスを継承しました

 ④スカラvalが文は、定義された関数を使用して、DEF文方法および機能を定義します

{試験クラス
DEF法(X:INT)3 + X =
ヴァル=関数(X:INT)。3 = X +>
}
2.Scalaメソッド
宣言構文法①

   基本的な構文

      DEFメソッド名([パラメータ名:パラメータタイプ]、...)[[:戻り値型] = {

          声明...

          リターンの戻り値

     }

    定義:[]代替的に、またはしない場合があり、そこ= {}、書き込み、及び数はメソッド本体と等しい場合はない可能性があり、この方法は、暗黙のうちに彼のタイプが抽象でも含む、(要約)抽象宣言されていますタイプ

    1)メソッド宣言キーワードDEF(定義)

    2)[パラメータ名:パラメータタイプ]、...:その関数のパラメータリスト、することはできません。コンマで区切られたパラメータが複数ある場合

    ステートメント3)方法:注文に特定の機能ブロックを実現すること

    4)この方法は、値を返すことができないかもしれません

    5)=フォーム::戻り値型に値1を返し  

getRes DEF(N1:INT、N2:INT、オペラ:チャー)のInt = {
N1 + N2
}
    6)戻り値フォーム2:戻り値タイプ=完全な型推論を使用して、不確実性を表します

DEF getRes(N1:INT、N2 :INT、OPER:チャー)のInt = {// メソッド宣言の戻り値:のInt
IF(オーパー== '+'){
N1 + N2
}他IF(オーパー== ' - 「){
N1 - N2
}他{
ヌル//実行エラー
}
}
    注:nullがAnyRefのサブクラスですが、nullがAnyValのサブクラスではないので、ここでは、コンパイラは文句はないが、非場合、実行はTypeError例外を報告しますnullを返すように、この方法は、値を返すことがあります。int直接除去=数を、型推論Scalaは自動的に返されます

    、戻り値がないことリターンは有効になりません:7)3の形で値を返します

getRes DEF(N1:INT、N2:INT、オペラ:チャー){
正常に実行するために、N1 + N2 //コードを返すが、エフェクトリターンを取らない
}
    戻り値として結果の最後の行にデフォルトを実行するために、ノーリターンが存在しない8)場合

②メソッド注

 この方法は、正式なパラメータではなく、(して起動されなくてもよい場合は1)パラメータのリスト)は、複数の方法であってもよいです

 2)パラメータ値のリストを、データタイプのリストを返す値型と参照型とすることができます

 3)Scalaでの方法は、コードメソッド本体自体の最後の行に係る型推定方法を返すことができます。したがって、この場合には、returnキーワードを省略することができます

 場合にreturnキーワードが省略されているようにScalaは、それ自身を推測することができるので4)、戻り値のタイプを省略することができます

 この方法は、明示的にreturnキーワードを使用する場合は、この方法は、推論が自分で使用することはできません返す5)、はっきりと書かれたためにこの時間:戻り値の型=は、もちろん、あなたが)も、(戻り値リターンで、何も書いていない場合

DEF getSum(N1:INT、N2 :INT)= {// = 数を省略することができず、省略された場合、それは(RESが得られ、戻り値を意味する)
N1 + N2
}
 。6)戻り値メソッドが明示的に宣言しない場合(文単位)、その後でもreturnキーワードを持つメソッド本体は、戻り値を持っていません。

 明確な方法は、値又は不確定戻り型を返さない場合は7)、戻り値の型)を省略(または任意として宣言することができます

 8)構文構造のどれが構文Scalaの他の構文構造(フレキシブル)入れ子にすることができ、すなわち、この方法は、さらに、メソッドを定義/宣言することができる、クラスが再宣言することができるクラス、メソッドは次に/定義方法を宣言することができます

{TestDefオブジェクト
DEFメイン(引数:配列[文字列]):単位= {
//のsayHelloで定義された主な機能の再表示/方法
DEFのsayHello(名:文字列):文字列= {
DEFのsayHello(名:文字列):文字列= {
+名"ハロー"
}
のsayHello(名)
}
VAR = R&LTのsayHello( "テリー")
のprintln( "R&LT =" + R&LT)= R&LTテリーハロー//
}
}
 。9)パラメータScalaの方法、パラメータ宣言、引数が指定されていない場合、直接初期値(デフォルト値)が割り当てられ、この方法は、デフォルト値が呼び出されます。引数が指定されている場合、実際の参加者のデフォルト値は、カバー

{テスト・オブジェクト
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") // A覆うデフォルト値が使用されるパラメータ名
}

文字列= "localhost"を、ポート:DEF mysqlCon(ADDをint型= 3306、
ユーザー:文字列= "ルート"、PWD:文字列= "ルート"):単位= {
printlnの( "追加=" +追加)
のprintln( "ポート=" +ポート)
のprintln( "ユーザー=" +ユーザー)
のprintln(「PWD =」+ PWD)
}
}
 。11)が形成スカラ方式のデフォルトパラメータvalは、そのためのプロセスで変更することができません

 結果の型から推測することはできません再帰的方法を実行しませんでした)12の前に、使用中の明確な戻り値の型を持っている必要があります

 13)Scalaの方法は、可変パラメータをサポート

SUM DEF(引数:のInt *):= {}のInt
3.Scala機能
    実質的に同一の機能及び方法が、Scalaで、機能の概念はより重要かつ広範な、より柔軟です。

  関数の定義を①

   同様の方法は、ルールを定義します。

DEF ABS(X:ダブル)= (X> 0)、Xそうならば-x
  関数は再帰関数でない場合には、Scalaの戻り型はバック=式で推測することができます。関数は再帰的であるしかし、一度、あなたは指定された戻り値の型を表示する必要があります。

RES DEF(N:INT):(1-N-)のInt = IF(N <0、1)他のn-RES *
  ②匿名関数

   Scalaの匿名関数定義されている構文は、右は関数の本体で、左側の矢印は、パラメータリストで、非常に簡単です。無名関数を使用した後、私たちのコードより簡潔な。

   :のInt匿名関数のパラメータを受け付ける入力の種類を定義するには、次の式

valは=(:INT、追加x Y:INT)=> X + Y
  上で定義した匿名関数を、実際に、そのようなアプローチは、以下の略語です。

機能1の追加新しい新しい= DEFの[int、int]は{
; = X + 1のInt DEF(:のInt X)を適用
}
 次のように使用される機能として利用可能追加を

println((3、4)を追加 )
 以下のように私たちは、匿名関数のパラメータに提供されないことがあります。

ヴァルemptyFunc =()=> { printlnを(「こんにちはスカラ座!」)}
 我々が言った以上、あなたは方法がないときパラメータリストを持っている場合、あなたはメソッド名を呼び出すことができます直接書き込むことができますが、引数なしの匿名関数呼び出し()括弧を持参

println(emptyFunc())
メソッドを相互変換し、使用および機能
    の機能自体は、実際に形質継承オブジェクトであり、これは、Javaのカスタムメソッドに対応する、質量参加のための自然な方法としては問題のパラメータは機能しないであろう送信パラメータとして学生のクラスオブジェクトは、関数、メソッドにパラメータとして渡すことができる、関数のパラメータとして渡すことができます

  

   プロセス自体は、直接パラメータとして使用することができないが、受信パラメータの型がメソッドまたは関数のメソッドパラメータの条件を満たした場合に、さらに質量参加の関数に変換することができ、その後、コンパイラScalaのデフォルト機能は、転送方式に変換します入ります

  

  以下に示すように当然のことながら、この方法はまた、方法の関数として+ _ +空間変換メソッド名を使用することができます。

  

例外5.Scala例外
 ①Scalaの例外処理の例

{試みる
ヴァルNUM = 10/0
{キャッチ}
:はArithmeticException =>のprintlnを( "例外は、ゼロによる除算の演算をキャプチャ")ケースEXを
ケースEX:例外=>のprintln( "例外捕捉")
}最後に{
//最終実行するコード
のprintln(「Scalaの最後に...」)
}
②カスタム例外クラスのスカラを

   スカラ座では、独自の例外を作成することができます。また、カスタム例外として知られています。例外クラスを拡張することにより、およびカスタム例外クラスを宣言します。クラスで独自のカスタム例外メッセージを作成します。例を見てみましょう:
 

//声明一个异常类继承例外
クラスInvalidAgeExceptionは(S:String)を例外(S){}延び

クラスExceptionExample {
@throws(classOfは[InvalidAgeException])
:{DEF(中間年齢)検証
(年齢<18){場合を
新しい投げますInvalidAgeException( "対象外")
}他{
printlnの( "あなたは資格がある")
}
}
}

オブジェクトデモ{
defのメイン(引数:配列[文字列]){
VAR eは=新しいExceptionExampleは()
{してみてください
(5)e.validateを
}キャッチ{
ケースE:例外=>のprintln( "例外発生しました:" + E)
}
}
}
③スカラ异常处理总结

  1)Scalaの異常な作業メカニズムとJavaが、Scalaはチェックされていない(つまり、実行時にはない珍しいコンセプトScalaのコンパイラ、例外がキャプチャされているプロセスであり、例外)コンパイル

  2)キーワードのスローを使用して、例外オブジェクトを投げます。すべての例外はThrowableのサブタイプです。式が入力され、それは何も、すべてのタイプのサブタイプではないので、何もありませんので、式はの必要な種類を使用することができます投げる投げます

メインDEF(引数:配列[文字列]):単位= {
ヴァルRES =テスト()
のprintln(res.toString)
}
DEF試験():= {何も
スロー新しい新しい例外( "異常")
}
  3)Scalaで、異常一致のパターンマッチングを行うためのアイデアを借り、従って、catchブロックは、ケース節の一連の対応する例外と一致することです。類似のJavaスイッチケースX:コードブロック

  例外が発生した場合に同じで他の言語と4)異常な捕捉機構は、catch節は、連続キャプチャです。したがって、catch句では、より具体的な例外越前後に頼って、異常なことで、より多くの人気、かつて一般的な例外書き込み場合、Scalaでもエラーなし、ポストに特定の例外を書きますが、これは非常に悪いプログラミングスタイルであります

  5)Scalaは、例外を宣言するためにキーワードをスロー提供します。あなたは珍しい文が定義されたメソッドを使用することができます。これは、この例外情報をスローする場合があり、このメソッドの呼び出し元に機能を提供します。これは、関数のコードが処理に含まれる呼び出し、try-catchブロックをプログラムの異常終了を避けるためにするのに役立ちます。Scalaで、あなたは例外をスロー宣言するために注釈を使用することができます

DEFメイン(引数:配列[文字列]):単位= {
F11()
}
@throws(classOf [NumberFormatExceptionが])//等同于NumberFormatException.class
DEF F11()= { "ABC" .toInt}
 
----- ---------------- 

おすすめ

転載: www.cnblogs.com/ly570/p/10947719.html