<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    asdtiang的博客 感謝blogjava提供的博客交流平臺(tái)
    表達(dá)式是可以生成某個(gè)結(jié)果值的代碼段,可以結(jié)合使用表達(dá)式來(lái)生成“更大的”表達(dá)式。JavaFX Script 編程語(yǔ)言是表達(dá)式語(yǔ)言,這意味著一切(包括循環(huán)、條件甚至塊)都是表達(dá)式。在某些情況下(如 while 表達(dá)式),表達(dá)式具有 Void 類型,這意味著它們不返回結(jié)果值

    塊表達(dá)式由一系列聲明或表達(dá)式組成,它們括在花括號(hào)中并用分號(hào)進(jìn)行分隔。塊表達(dá)式的值是最后一個(gè)表達(dá)式 的值。如果塊表達(dá)式中不包含表達(dá)式,則其類型為 Void。請(qǐng)注意,vardef 是表達(dá)式。

    下面的塊表達(dá)式對(duì)幾個(gè)數(shù)字進(jìn)行相加并將結(jié)果存儲(chǔ)在一個(gè)名為 total 的變量中:

    var nums = [5, 7, 3, 9];
    var total = {
    var sum = 0;
    for (a in nums) { sum += a };
    sum;
    }
    println("Total is {total}.");
     

    運(yùn)行此腳本將生成以下輸出:

    Total is 24.
     

    第一行 (var nums = [5, 7, 3, 9];) 聲明一個(gè)整數(shù)序列。

    第二行聲明一個(gè)名為 total 的變量,該變量將用來(lái)存放這些整數(shù)的和。

    隨后的塊表達(dá)式由左花括號(hào)和右花括號(hào)之間的所有內(nèi)容構(gòu)成:

    {
    var sum = 0;
    for (a in nums) { sum += a };
    sum;
    }
     

    在該塊內(nèi)部,第一行代碼聲明一個(gè)名為 sum 的變量,該變量將用來(lái)存放此序列中各個(gè)數(shù)字之和。第二行(一個(gè) for 表達(dá)式)遍歷該序列,將每個(gè)數(shù)字與 sum 相加。最后一行設(shè)置該塊表達(dá)式的返回值(在本例中為 24)。

    使用 if 表達(dá)式后,僅當(dāng)特定條件為真時(shí)才執(zhí)行某些代碼塊,從而對(duì)程序流 進(jìn)行定向。

    例如,以下腳本基于年齡來(lái)設(shè)置票價(jià)。12 歲到 65 歲的人支付正常價(jià) 10 美元。老人和兒童支付 5 美元;5 歲以下的兒童免費(fèi)。

    def age = 8;
    var ticketPrice;

    if (age < 5 ) {
    ticketPrice = 0;
    } else if (age < 12 or age > 65) {
    ticketPrice = 5;
    } else {
    ticketPrice = 10;
    }
    println("Age: {age} Ticket Price: {ticketPrice} dollars.");
     

    如果將 age 設(shè)置為 8,該腳本將生成以下輸出:

    Age: 8 Ticket Price: 5 dollars.
     

    該示例的程序流如下所示:

    if (age < 5 ) {
    ticketPrice = 0;
    }
    else if (age < 12 or age > 65) {
    ticketPrice = 5;
    } else {
    ticketPrice = 10;
    }
     

    如果 age 小于 5,則票價(jià)將設(shè)置為 0。

    程序隨后將跳過(guò)其余條件測(cè)試并輸出結(jié)果。

    如果 age 不小于 5,程序?qū)⒗^續(xù)執(zhí)行下一個(gè)條件測(cè)試(由后跟另一個(gè) if 表達(dá)式的 else 關(guān)鍵字來(lái)指示):

    if (age < 5 ) {
    ticketPrice = 0;
    } else if (age < 12 or age > 65) {
    ticketPrice = 5;
    }
    else {
    ticketPrice = 10;
    }
     

    如果人的年齡在 5 到 12 歲之間或者大于 65 歲,該程序會(huì)將票價(jià)設(shè)置為 5 美元。

    如果人的年齡在 12 到 65 歲之間,程序會(huì)流至最后一個(gè)代碼塊(用 else 關(guān)鍵字進(jìn)行標(biāo)記):

    if (age < 5 ) {
    ticketPrice = 0;
    } else if (age < 12 or age > 65) {
    ticketPrice = 5;
    } else {
    ticketPrice = 10;
    }
     

    只有當(dāng)前面的所有條件均不滿足時(shí),才會(huì)執(zhí)行此塊。它會(huì)針對(duì) 12 到 65 歲之間的人將票價(jià)設(shè)置為 10 美元。


    注:可以將上面的代碼縮減成一個(gè)非常簡(jiǎn)潔的條件表達(dá)式:

    ticketPrice = if (age < 5) 0 else if (age < 12 or age > 65) 5 else 10;
     
    這是一個(gè)需要掌握的有用方法,在本教程的后 面部分中還會(huì)使用它。

    “序列”一課講授了一種用來(lái)聲明形成等差數(shù)列的數(shù)字序列的簡(jiǎn)化表示法。

    var num = [0..5];
     

    從技術(shù)上講,[0..5] 是一個(gè)范圍表達(dá)式。默認(rèn)情況下,相鄰值之間的間 隔為 1,但是您可以使用 step 關(guān)鍵字來(lái)指定一個(gè)不同的間隔。例如,定義一個(gè)由 1 到 10 之間的奇數(shù)構(gòu)成的序列:

    var nums = [1..10 step 2];
    println(nums);
     

    此腳本的輸出如下所示:

    [ 1, 3, 5, 7, 9 ]
     

    要?jiǎng)?chuàng)建降序范圍,請(qǐng)確保第二個(gè)值小于第一個(gè)值,并指定一個(gè)負(fù)的 step 值:

    var nums = [10..1 step -1];
    println(nums);
     

    輸出為:

    [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
     

    如果您在創(chuàng)建降序范圍時(shí)沒(méi)有提供負(fù)的 step 值,則會(huì)生成一個(gè)空序列。

    以下代碼:

    var nums = [10..1 step 1];
    println(nums);
     

    將生成下面的編譯時(shí)警告:

    range.fx:1: warning: empty sequence range literal, probably not what you meant.
    var nums = [10..1 step 1];
    ^
    1 warning
     

    如果您完全忽略 step 值,也會(huì)生成一個(gè)空序列。

    另一個(gè)與序列有關(guān)的表達(dá)式是 for 表達(dá)式。for 表達(dá)式為遍歷序列中的各個(gè)項(xiàng)提供了一種方便的機(jī)制。

    以下代碼提供了一個(gè)示例:

    var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

    for (day in days) {
    println(day);
    }
     

    此腳本的輸出如下所示:

    Mon
    Tue
    Wed
    Thu
    Fri
    Sat
    Sun
     

    讓我們將該示例分成幾個(gè)部分。for 表達(dá)式以 "for" 關(guān)鍵字開(kāi)頭:

    for (day in days) {
    println(day);
    }
     

    days 變量是要由 for 表達(dá)式處理的輸入序列的 名稱:

    for (day in days) {
    println(day);
    }
     

    當(dāng) for 表達(dá)式遍歷該序列時(shí),day 變量用來(lái)存放當(dāng)前項(xiàng):

    for (day in days) {
    println(day);
    }
     

    請(qǐng)注意,不需要在腳本中的其他位置聲明 day 變量即可將其用在 for 表達(dá)式中。此外,在完成整個(gè)循環(huán)之后,將無(wú)法訪問(wèn) day。程序員通常會(huì)賦予臨時(shí)變量(如該變量)非常短的名稱(或由一個(gè) 字母構(gòu)成的名稱)。

    在上例中,未顯示 for 返回值;但 for 也是一個(gè)返回序列的表達(dá)式。以下代碼顯示了兩個(gè)使用 for 表達(dá)式從另一個(gè)序列創(chuàng)建序列的示例:

    // Resulting sequence squares the values from the original sequence.
    var squares = for (i in [1..10]) i*i;

    // Resulting sequence is ["MON", "TUE", "WED", and so on...]
    var capitalDays = for (day in days) day.toUpperCase();
     

    請(qǐng)注意,toUpperCase 函數(shù)由 String 對(duì)象提供。您可以通過(guò)查閱 API 文檔來(lái)查看完整的可用函數(shù)列表。

    另一個(gè)循環(huán)結(jié)構(gòu)是 while 表達(dá)式。與作用于序列中項(xiàng)的 for 表達(dá)式不同,while 表達(dá)式會(huì)一直循環(huán),直到給定的表達(dá)式為 false 為止。盡管 while 在語(yǔ)法上是表達(dá)式,但是它的類型為 Void,不返回值。

    下面提供了一個(gè)示例:

    var count = 0;
    while (count < 10) {
    println("count == {count}");
    count++;
    }
     

    此腳本的輸出如下所示:

    count == 0
    count == 1
    count == 2
    count == 3
    count == 4
    count == 5
    count == 6
    count == 7
    count == 8
    count == 9
     

    第一行聲明一個(gè)名為 count 的變量并將其初始化為 0:

    var count = 0;
    while (count < 10) {
    println("count == {count}");
    count += 1;
    }
     

    第二行以 while 表達(dá)式開(kāi)頭。此表達(dá)式創(chuàng)建了一個(gè)循環(huán)(在左花括號(hào)和右花括號(hào)之間),該循環(huán)會(huì)一直進(jìn)行,直到 count < 10 的值為 false 為止:

    var count = 0;
    while (count < 10) {
    println("count == {count}");
    count += 1;
    }
     

    While 表達(dá)式的主體會(huì)輸出 count 的當(dāng)前值,然后將 count 的值加 1:

    var count = 0;
    while (count < 10) {
    println("count == {count}");
    count += 1;

    }
     

    當(dāng) count 等于 10 時(shí),循環(huán)退出。要?jiǎng)?chuàng)建一個(gè)無(wú)限循環(huán),請(qǐng)將 true 關(guān)鍵字放在左小括號(hào)和右小括號(hào)之間,如 while(true){} 中所示。

    breakcontinue 表達(dá)式與循環(huán)表達(dá)式有關(guān)。這兩個(gè)表達(dá)式會(huì)影響循環(huán)迭代:break 完全放棄循環(huán),而 continue 僅放棄當(dāng)前迭代。

    盡管 breakcontinue 在語(yǔ)法上是表達(dá)式,但它們的類型為 Void,不返回值。

    示例:

    for (i in [0..10]) {
    if (i > 5) {
    break;
    }

    if (i mod 2 == 0) {
    continue;
    }

    println(i);
    }
     

    輸出:

    1
    3
    5
     

    如果沒(méi)有 if 表達(dá)式,該程序?qū)⒅皇禽敵?0 到 10 之間的數(shù)字。

    如果只有第一個(gè) if 表達(dá)式,程序?qū)⒃?i 的值大于 5 時(shí)中 斷循環(huán):

    if (i > 5) {
    break;
    }
     

    因此,程序?qū)H輸出 1 到 5 之間的數(shù)字。

    通過(guò)添加第二個(gè) if 表達(dá)式,程序?qū)H放棄循環(huán)的當(dāng)前迭代而繼續(xù)執(zhí)行下一 個(gè)迭代:

    if (i mod 2 == 0) {
    continue;
    }
     

    在這種情況下,只有當(dāng) i 為偶數(shù)(即 i 能被 2 整除,沒(méi)有余數(shù))時(shí)才執(zhí)行 continue。出現(xiàn)這種情況時(shí),將永遠(yuǎn)不會(huì)調(diào)用 println(), 因此輸出中將不包含該數(shù)字。

    在實(shí)際的應(yīng)用程序中,正常的腳本執(zhí)行流有時(shí)會(huì)被某個(gè)事件中止。例如,如果腳本從某個(gè)文件中讀取輸入,但是找不到該文件,該 腳本將無(wú)法繼續(xù)。我們將這種情況稱為“異常”。


    注意:異常是對(duì)象。它們的類型通常以它們所表示的情況命名(例如,FileNotFoundException 表示找不到文件的情況)。但是,定義一組特定于即將給出的示例的異常不在本節(jié)的討論范圍之內(nèi)。因此,我們將使用一個(gè)通用的 Exception 對(duì)象(從 Java 編程語(yǔ)言借用而來(lái))來(lái)說(shuō)明 throwtrycatchfinally 表達(dá)式。

    以下腳本定義(和調(diào)用)一個(gè)會(huì)拋出異常的函數(shù):

    import java.lang.Exception;

    foo();

    println("The script is now executing as expected... ");

    function foo() {
    var somethingWeird = false;

    if(somethingWeird){
    throw new Exception("Something weird just happened!");
    } else {
    println("We made it through the function.");
    }
    }
     

    按原樣運(yùn)行此腳本(將 somethingWeird 設(shè)置為 false) 將輸出以下消息:

    We made it through the function.
    The script is now executing as expected...
     

    但是,如果將該變量更改為 true,則會(huì)拋出異常。在運(yùn)行時(shí),該腳本將崩潰并顯示以下消息:

    Exception in thread "main" java.lang.Exception: Something weird just happened!
    at exceptions.foo(exceptions.fx:10)
    at exceptions.javafx$run$(exceptions.fx:3)
     

    為了防止崩潰,我們將需要使用 try/catch 表達(dá)式來(lái)包裝 foo() 調(diào)用。顧名思義,這些表達(dá)式嘗試執(zhí)行某些代碼,但會(huì)在出現(xiàn)問(wèn)題時(shí)捕捉異常:

    try {
    foo();
    } catch (e: Exception) {
    println("{e.getMessage()} (but we caught it)");
    }
     

    現(xiàn)在,程序不會(huì)崩潰,而只是輸出:

    Something weird just happened! (but we caught it)
    The script is now executing as expected...
     

    還有一個(gè) finally 塊(它在技術(shù)上不是表達(dá)式),無(wú)論是否拋出了異常,該塊始終在 try 表達(dá)式退出之后的某個(gè)時(shí)間執(zhí)行。finally 塊用來(lái)執(zhí)行無(wú)論 try 主體是成功還是拋出異常都需要執(zhí)行的清除操作。

    try {
    foo();
    } catch (e: Exception) {
    println("{e.getMessage()} (but we caught it)");
    } finally {
    println("We are now in the finally expression...");
    }
     

    程序輸出現(xiàn)在為:

    Something weird just happened! (but we caught it)
    We are now in the finally expression...
    The script is now executing as expected...



    天蒼蒼,野茫茫,風(fēng)吹草底見(jiàn)牛羊

    posts - 80, comments - 24, trackbacks - 0, articles - 32

    Copyright © asdtiang

    asdtiang的博客 PaidMailz
    點(diǎn)擊廣告網(wǎng)賺A(每天4個(gè)廣告,每個(gè)0.0025美元,一個(gè)搜索廣告0.03美元)
    主站蜘蛛池模板: 久久精品私人影院免费看| 亚洲国产精品日韩av不卡在线| 无码AV动漫精品一区二区免费| 在线视频免费国产成人| 亚洲综合色婷婷在线观看| 成人免费视频软件网站| 亚洲一区精彩视频| 免费的涩涩视频在线播放| 美女羞羞免费视频网站| 伊人久久大香线蕉亚洲| 日韩电影免费在线观看网站| 久久香蕉国产线看观看亚洲片| 99久久综合精品免费| 男人天堂2018亚洲男人天堂| 亚洲欧洲中文日韩av乱码| A片在线免费观看| aa级毛片毛片免费观看久| 久久精品国产精品亚洲毛片| 无码国产精品一区二区免费式直播| 亚洲最大天堂无码精品区| 久久亚洲sm情趣捆绑调教| 四虎成人精品一区二区免费网站| 免费人成网上在线观看| 亚洲视频免费在线看| 亚洲av无码国产精品色午夜字幕 | 成人爱做日本视频免费| 免费电视剧在线观看| a级成人毛片免费图片| 亚洲最大成人网色香蕉| 91亚洲视频在线观看| 国产色爽女小说免费看| 免费看黄的成人APP| a级日本高清免费看| 无码国产精品一区二区免费vr| 亚洲欧美自偷自拍另类视| 亚洲av永久无码精品国产精品| 亚洲精品美女久久久久99| 免费无码不卡视频在线观看| 四虎影视大全免费入口| 国产免费啪嗒啪嗒视频看看| 成人在线免费看片|