周末雨会(四):自定义资料类别 Defined Data Class

担心晚上天气可能会变糟,两人选择外带饮料。

「刚刚阵列里放的只有价钱,怎麽分辨饮料的名字?」诗忆啜饮着牛奶可可,延续刚刚的饮料价位筛选问题。

「⋯⋯其实是刚刚的饮料单空白处不多,就省略了用自定义类别的描述。定义饮料的细节。」唯心把饮料放下,转而走到桌前,打开IDE建立了两个档案。

图1

data class 饮料(val name: String, val price: Int)

图2

fun main() {
    val 饮料们 = arrayOf(饮料("鲜奶红茶",50), 饮料("多多奶茶", 60), 饮料("火龙果奶茶", 70), 饮料("奶茶", 30), 饮料("鲜奶绿茶", 50))

    for (饮料 in 饮料们) {
        // if条件式
        if (饮料.price <= 60) {
            println(饮料.name)
        }
    }
}

她飞快的输入程序码後,旋即起身,结果和拿着饮料走过来的诗忆遇个正着。

唯心顺手收走诗忆手中的饮料,放到自己的饮料旁边,微笑的解释说:「饮料不要靠近笔电。」

「啊,忘记了。」诗忆感到尴尬,耳朵发红。

「嗯,我知道,慢慢留意就好。说到该记的事,你不觉得程序码统一用英文的话,输入法就不用频繁切换,更何况中文还要选字。用英文的话,习惯了之後既节省时间也不用折磨手指。你总有一天要练好英文的,何不一开始就练?」

唯心给诗忆看看IDE对使用了非ASCII字的中文字发出的警告。

图3

「如果要用英文,记住类别名字要用英文字母大写开头,变数名字要用英文字母小写开头。」

图3

诗忆看她边说边重复握紧拳头打开拳头,增添手部的血液循环的动作,不由得点头。

唯心没有继续说话,诗忆就开始研究两个档案程序码。「是故意不放在一个档案的吗?」

「是的,我习惯将类别从其他程序码中独立出来放在class档案,如果其他程序码段落也要用到这个类别,可以节省寻找时间。因为一天只有二十四小时啊。」唯心一脸可惜的说。「不过找到延长的方法的话,好像也有点危险呢,对被支配者来说呐。」她轻轻地勾起嘴角,露出略带玩味的笑容。

诗忆直觉继续这个话题不太安全,所以决定还是回头提起有关程序的问题就好。「学姐,class前面都要加data的吗?」

唯心回答:「啊,不用,一般的类别只需要classdata class是资料类别,很多功能针对资料属性特化,比如同样印出,两者结果就不一样。」

println(饮料("鲜奶绿茶", 50))

「如果是data class,会印出类别和属性饮料(name=鲜奶绿茶, price=50));反之,如果是class,预设只会印出类别和物件存放的记忆体位置饮料@2c7b84de,当然要改预设也是可以的,只是一般都是有需要再改。」唯心继续补充:「比对两个类别物件的方式也不一样,data class注意的是属性值有没有相同,class预设注意的是存放的位置是不是相同。所以class可以没有属性,但是data class一定要有属性,所以data class一开始就会在括号里的第一建构式用valvar设定属性。」

「一般class不在第一建构式设定属性的话,那些变数会变成什麽?」诗忆问。

唯心笑了笑:「这个吗?通常会在後面的大括号里对传进来的变数做处理或计算再另外储存结果,毕竟不是属性的变数,只能在後面的大括号生存,想和之前一样呼叫饮料.price,程序只会和你说查无此人。」

class 饮料(name: String, price: Int) {
    val newPrice = price + 10
}

<<:  [自然语言处理基础] 语法分析与资讯检索 (II)

>>:  Day 15 读 Go Concurrency Patterns - Rob Pike II

Day9 - 读 Concurrency is not Parallelism - Rob Pike (四)

续上篇 Day8 - 读 Concurrency is not Parallelism - Rob ...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day20. 『小专题◕ᴥ◕』 Vue 旅游小帮手(一)

话说~ 从疫情到现在,已经不知道多久没出去玩了~ 好想出去玩玩喔~ 从开赛到现在已经默默地来到第二...

[Day 6]中秋时在做什麽,有没有空,可以帮想标题吗(前端篇)

今天要先来看Native Camp的流程,首先是点击注册後的页面, 有信箱和密码,还有SSO的选项,...

[Part 4 ] Vue.js 的精随-元件 Slots

Slots ? 想要传入内容到子层中,slots 是另一种可以选择的方式,在 component 预...

Day01 从零开始学React

前言 因为是第一次挑战铁人赛,参赛组别是自我挑战组,所以不想给自己太大压力,期许只要能完成30天不断...