Closed wtysos11 closed 3 years ago
短路与(或者短路或)是对逻辑运算代码优化的利用。比如对于逻辑与A&&B来说,因为只要出现一个False,其结果必定为False,所以A为False的时候计算会被直接短路,B中不会被计算。
类似的,逻辑或A||B时,如果A为真也会出现短路现象。只要做这个编译器没有什么特殊的目的,一般都会这样实现。
该操作在实际中是有意义的,可以省去对空指针或非法条件的判断。比如
func (p *Publisher) sendTopic( sub subscriber, topic topicFunc, v interface{}, wg *sync.WaitGroup){ defer wg.Done() if topic!= nil && !topic(v){ return } select{ case sub <- v: case <- time.After(p.timeout): } }
该函数是发布者-接受者模型中发布函数的实现,发布者将v interface{}信息发送给指定的接受者。这个指定是通过判断函数topic来实现的(具体实现是一个map),topic == nil表示对全体接受者发送,不然topic(v) == True的时候表示对该接受者发送。
整体的实现是通过将信息遍历给所有接受者来实现的。其逻辑就是:
短路出现在对topic的判断部分。实际上该部分的逻辑按照正常人的思路应该写为!(topic == nil || topic(v)),但这样就需要对topic是否为空进行先置判断,反而会更加累赘。当然,注释要写清楚。
!(topic == nil || topic(v))
短路与(或者短路或)是对逻辑运算代码优化的利用。比如对于逻辑与A&&B来说,因为只要出现一个False,其结果必定为False,所以A为False的时候计算会被直接短路,B中不会被计算。
类似的,逻辑或A||B时,如果A为真也会出现短路现象。只要做这个编译器没有什么特殊的目的,一般都会这样实现。
该操作在实际中是有意义的,可以省去对空指针或非法条件的判断。比如
该函数是发布者-接受者模型中发布函数的实现,发布者将v interface{}信息发送给指定的接受者。这个指定是通过判断函数topic来实现的(具体实现是一个map),topic == nil表示对全体接受者发送,不然topic(v) == True的时候表示对该接受者发送。
整体的实现是通过将信息遍历给所有接受者来实现的。其逻辑就是:
短路出现在对topic的判断部分。实际上该部分的逻辑按照正常人的思路应该写为
!(topic == nil || topic(v))
,但这样就需要对topic是否为空进行先置判断,反而会更加累赘。当然,注释要写清楚。