1
qdwang 2015-08-10 08:29:43 +08:00 via Android
猜测lz很喜欢js
|
2
wangyifei6817 2015-08-10 08:31:06 +08:00
js写多了不适应强类型吧?
|
3
kalintw OP |
5
ipconfiger 2015-08-10 08:49:15 +08:00
没有被自动转换坑过?
|
6
zylll520 2015-08-10 08:51:28 +08:00
思路不一样,Swift 倒有点像把大家都约定好的格式全部省略,把隐藏的格式明显标示
|
7
publicID001 2015-08-10 08:52:16 +08:00 via Android 1
@kalintw C 是弱类型的
|
8
kalintw OP @ipconfiger
好吧。。。 那这个捏,更好玩了: var x: Int = 4 var y: Double = 8.0 // error, 就因为等号左边少了个空格 var c= Double(x) + y // error, 就因为等号右边少了个空格 var c =Double(x) + y // pass var c = Double(x) + y |
9
echo1937 2015-08-10 08:52:38 +08:00
|
10
kalintw OP @publicID001
好像C#是强类型的,有没有会C#的,C#中数学运算会自动提升数据类型吗? |
11
ipconfiger 2015-08-10 08:57:21 +08:00
C#中数学运算会自动提升数据类型
|
12
kalintw OP |
13
jeremaihloo 2015-08-10 09:02:09 +08:00
C#的类型转换,隐式转换和显示转换
|
15
wezzard 2015-08-10 09:08:19 +08:00
不是腦殘設計,是非常好的設計,因爲顯式類型轉換可能會跨越精度,隱式類型轉換基本都是 typealias 或者 literal value。
Swift 是一個講究 code level safety 的語言,不像 C 充分信賴程序員。 |
16
FrankFang128 2015-08-10 09:09:44 +08:00 via Android
圣战
|
18
morethansean 2015-08-10 09:14:13 +08:00
看到楼上这句 “不是脑残设计,是非常好的设计”,我瞬间觉得什么都说不出。
|
19
guotie 2015-08-10 09:18:16 +08:00
真的不是脑残设计,是非常好的设计
go也是这样 |
20
jaminzzhang 2015-08-10 09:20:16 +08:00
swift的书上有专门的介绍,可以认真看看书。楼上已经有人回答了,看来LZ真的没有被自动类型转换坑过
|
21
Perry 2015-08-10 09:20:36 +08:00 via iPhone
有个 IDE(Xcode)不是多大事情吧 8 楼的例子
|
22
wezzard 2015-08-10 09:39:41 +08:00
單單以爲方便就是好的設計,我也瞬間感覺甚麼都說不出。
|
23
likid 2015-08-10 09:39:59 +08:00
var c= Double(x) + y // Error, Prefix/postfix '=' is reserved
|
24
dorentus 2015-08-10 09:58:50 +08:00
Swift 1.2 曾经支持过 implicit conversion 的,原生类型默认没有,但是当时你可以写这样的代码:
extension Double { func __conversion() -> UInt8 { return UInt8(self) } func __conversion() -> Int { return Int(self) } // add more if you need to } 那时 String 和 NSString 之类也是隐式转来转去的,经常出各种问题…… |
25
huanglexus 2015-08-10 10:06:15 +08:00
楼组应该学一学编译原理
|
27
jiang42 2015-08-10 10:27:27 +08:00 via Android
|
28
publicID001 2015-08-10 10:44:54 +08:00
@jiang42 类型系统是个超级大坑
|
29
publicID001 2015-08-10 10:46:51 +08:00
|
32
jiang42 2015-08-10 10:51:49 +08:00 via Android
@publicID001 诶,你给我发维基地址干嘛,我没说错啊,there is no universally accepted definition of what these terms mean.
想一想类型系统有多少paper,颤抖吧凡人 |
33
kalintw OP @huanglexus
各有所爱,学了编译原理我也觉得适当的自动类型隐式转换还是挺好的 |
34
publicID001 2015-08-10 10:57:26 +08:00
@kalintw 显示类型转换在我看来感觉是防呆设计
|
35
JohnSmith 2015-08-10 10:59:10 +08:00
不太推荐隐式转化,近年出的静态语言都要求显示转换了
|
36
wangyifei6817 2015-08-10 10:59:35 +08:00
C是强类型?
想学swift就按照swift的类型玩,被自动转换坑过的都知道强类型推断的好处 至于你那个等号的问题 是因为实现了运算符重载协议 导致的冲突 要么空格 要么重载运算符 |
37
kalintw OP @ipconfiger
@jiang42 @w88975 @publicID001 @jaminzzhang @huanglexus 既然这种严格的类型检查safe,好处大,奇怪为啥Python、Ruby这些语言都提供了隐式类型转换? |
38
publicID001 2015-08-10 11:01:10 +08:00
@kalintw 符合直觉
|
39
fo2w 2015-08-10 11:04:02 +08:00
说委婉一点, 就是
因为没有被大坑过, 所以觉得自信满满 说直白一点, 就是 因为无知, 所以无畏 |
41
magicyu1986 2015-08-10 11:46:32 +08:00
对多语言技能的人来讲,确实是个坑...
|
42
bleaker 2015-08-10 11:48:56 +08:00
强类型 - 弱类型
静态类型 - 动态类型 这两组概念还是有一些不同的 |
43
ipconfiger 2015-08-10 12:13:43 +08:00
@kalintw 习惯的力量是巨大的
|
45
jiang42 2015-08-10 12:22:39 +08:00 via Android 1
@kalintw 符合直觉。说的直白点,小白觉得好用。
语言设计本身就是无数个tradeoff,完全看语言设计者的决策。你只提到了Ruby,Python,为什么不去看看Haskell和Ocaml呢。 当1.0+1!=2的时候你会感谢显式类型转换的 |
46
Shy07 2015-08-10 14:13:30 +08:00
Swift 和 Python 不清楚,但是 Ruby 是强类型的,Ruby 的变量是“Duck Type”,隐式转换的前提是对象存在 to_s, to_i 这类转换方法。
eg: a = 10086 puts a # 打印的不是 a 本身的对象,而是 a.to_s 返回的对象,隐式转换 a = "10086" # 为什么可以改变 a 的类型?Ruby 的变量是动态类型 puts a == 10086 # => false,为什么?因为 a 是 String,10086 是 Fixnum,强类型 puts 10087 == a.to_i + 1 # => true,显示转换类型,为什么支持调用 to_i ?Duck Type puts 10087 == a + 1 # => no implicit conversion of Fixnum into String (TypeError) 如果想要看到 document.write('10086' == 10086); // => true 这类代码,我建议还是继续 JS 大法好吧 |
47
jiang42 2015-08-10 14:22:53 +08:00 via Android
@Shy07 所以说,不要用强弱类型这种没有明确定义的词……从这个意义上来说,Python也是强类型的,只不过带了隐式类型转换
|
48
Exin 2015-08-10 19:26:10 +08:00
不懂。但我知道凡是有人说Apple的东西不好的地方,肯定有人洗地。
|
49
Shy07 2015-08-10 19:33:34 +08:00
@jiang42 Python 确实是强类型的 https://en.wikipedia.org/wiki/Python_(programming_language)
所谓强类型就是不同的类型操作之前需要进行强制转换,强制转换可以是显式的,也可以是隐式的 |
50
jiang42 2015-08-10 19:45:33 +08:00 via Android
|
53
rotoava 2015-08-10 21:11:45 +08:00 via iPhone
很讨厌swift。现在对swift的修饰一般说是现代化的编程语言,将来一定替换掉oc,支持函数式风格,苹果帝国支持野心勃勃等。想到python很多人只用一个词修饰-优雅。swift是和优雅不沾边的。太多的地方隐形表示,有些地方反而偏偏要显性表示。还有,尾参,外参、内参,尾参闭包组合起来,一个函数调用就有10种形式,呵呵。闭包定义方式也丑的不行,中间还夹杂一个in,函数都匿名了,加个in多丑。另外一版二版的一些改动就像开玩笑。
|
54
wezzard 2015-08-10 21:19:21 +08:00
這麼多人說 Python 好,我也去學個看看。
|
55
rotoava 2015-08-10 21:30:24 +08:00 via iPhone
被自动类型转化坑过有什么好讲的。不管是否支持自动类型转换,当存在危险的时候你都得有意识注意一下。当你意识一下之后,发现不要紧,且是支持自动类型转换的。所以省事了,直接开心写下一行。难道不是这个思路过程。
|
57
DingSoung 2015-09-29 13:10:07 +08:00
LZ 是没被 C 坑过
|