[翻译]Popfly系列课程8 –决定,决定:借助 Popfly学习逻辑

你Facebook上哪个好友是来自华盛顿?怎样创建一个mashup来查找不同制造商低于800美元的便携式电脑?iTunes中排名第一的HipHop歌曲是哪首?怎样完成一个地图mashup来使用不同颜色的图钉在地图上标记美国境内各处一加仑汽油的成本。

所有这些任务需要使用逻辑来选择恰好满足那些场景的项目,或者基于它们的值来显示不同的结果。本课将要介绍怎样创建Popfly mashup来完成处理这些类型问题的解决方案。

决定,决定:借助 Popfly学习逻辑

本课的Professor Popfly Mashups参考:

l MonsterMash (http://www.popfly.com/users/professorpopfly/MonsterMash)

l NorthSouth States (http://www.popfly.com/users/professorpopfly/NorthSouthStates)

l FacebookFriendsFilter (http://www.popfly.com/users/professorpopfly/FacebookFriendsFilter)

l Shopping(http://www.popfly.com/users/professorpopfly/Shopping)

l ConditionBuilderNumericComparisonTest(http://www.popfly.com/users/professorpopfly/ConditionBuilderNumericComparisonTest)

l PenniesFromHeaven(http://www.popfly.com/users/professorpopfly/PenniesFromHeaven)

image

学习目标

完成本课学习后,你将可以:

l 理解用于比较值得不同操作

l 解释分支逻辑与过滤逻辑的不同

l 使用ConditionBuilder块来为Filter与Logic块创建条件

l 使用Filter块选择数据中匹配一个条件的子集

l 使用Logic块基于一个条件或一组条件取得一个结果

l 在多个条件上使用AND,OR,与NOT操作

l 理解将数字字符作为字符与作为数字比较的结果的不同

概览

你Facebook上哪个好友是来自华盛顿?怎样创建一个mashup来查找不同制造商低于800美元的便携式电脑?iTunes中排名第一的HipHop歌曲是哪首?怎样完成一个地图mashup来使用不同颜色的图钉在地图上标记美国境内各处一加仑汽油的成本。所有这些任务需要使用逻辑来选择恰好满足那些场景的项目,或者基于它们的值来显示不同的结果。本课将要介绍怎样创建Popfly mashup来完成处理这些类型问题的解决方案。

本课集中介绍三个块的使用:ConditionBuilder, Filter与Logic。ConditionBuilder块帮助创建可作为Filter或者是Logic块输入的条件(比较值的准则,如“这个值与那个值是否相等”)。

Popfly使用Filter块来过滤一列数据,只返回那些满足过滤条件的项,而Logic块执行”if then else”与”if then else if”样式的使用一个或多个条件的分支逻辑。

ConditionBuilder

使用Condition Builder块来创建比较数据值的条件。依据这个条件被使用的方式,ConditionBuilder块提供了两个操作来创建条件。

FilterCondition操作创建一个与Filter块一起使用的条件。使用它来创建一个条件用于比较列表中每一项。comparisonVariable输入栏中的变量x这个表达式表示列表中每个项要比较的部分。

image

LogicCondition操作创建一个与Logic块一起使用的的条件。使用其来比较两个值并根据条件的结果做出选择。

image

ConditionBuilder允许你使用如下这些条件来比较值:

l is equal to

l is not equal to

l is greater than

l is greater than or equal to

l is less than

l is less than or equal to

l contains

l does not contain

l begins with

l ends with

任一个操作都可以应用到字符或数字类型的数据。默认是用于字符串比较,即,比较字符数据。最后4个操作符(contains, does not contain, begins with, ends with)自动将它们处理的数据作为字符串对待。标准比较运算符(equal, not equal, greater than, greater than or equal, less than, less than or equal to)可以作用于数字或字符数据。

最终提供给FilterCondition或LogicCondition的输入是一个Boolean值(或真或假)以高速Popfly怎样解释你正比较的数据。如果是字符型数据,提供给stringComparison这个输入参数的值应该为true。如果数据位数字数据,将这个值设为false。默认是则是进行字符串比较;即,比较字符数据。

合并条件

ConditionBuilder块提供Combine2Conditions与Combine3Conditions操作合并2个或3个使用LogicCondition或FilterCondition操作创建的简单条件来构建更复杂的条件。

你可以使用AND或OR操作符合并简单条件。为了让一系列使用AND合并在一起的条件为true,每个独立的条件必须为true。而让一系列使用OR合并在一起的条件为true,任意一个条件为true就可以实现这个目的。Not运算符是一个条件意思反转。

在这个例子中,4个块组成的序列展示了创建一个通过检查相关url是否以.gif,.jpg或.png来判断图片是否为GIF,JPG或PNG文件的FilterCondition。

要在一个mashup中使用这个序列,需将ContainBuilder(4)与一个包含URL列表的块连接到一个Filter块。

image

image

逻辑块

逻辑块通过按一系列比较执行分支来决定一个值。最简单的操作符是if1 – 一个使用单一条件的”if”操作符。如果条件为真,操作符返回第一个值,否则其返回第二个值。当创建与逻辑块一起使用的条件时,在ConditionBuilder块中使用LogicCondition

剩下的操作符,if2,if3,if4,if5与if6在2,3,4,5与6个条件上各自的执行分支。使用if3操作的逻辑块的处理步骤如下图所示。其它运算符(if1,if2,if4,if5,if6)工作方式相似。

image

过滤块

过滤块应用一个过滤条件到一个列表值(通常通过由一个连接的块传过来一个完整的对象来指定)并返回包含符合过滤条件的值的列表。当创建与过滤块一起使用的条件时,请使用ConditionBuilder块的FilterCondition操作。

image

供过滤块使用的条件需为一个包含变量x的短语,这个变量x代表了列表中每个待比较的项。如果你会使用JavaScript,你可以在JavaScript中编写条件。而不是在一个FilterCondition操作中使用ConditionBuilder块来创建条件,并将其连接到过滤块。

RSS过滤块工作方式相似,但其输入总是一个RSS源,块允许你指定要过滤的RSS源中的列。更多关于RSSFilter块中使用ConditionBuilder块的信息请参考本系列中关于RSS的课程。如果你知道怎样使用JavaScript,你可以在过滤块或RSS过滤块中编写作为条件的JavaScritp代码,而不是使用CondtionBuilder来构建并指定条件。

逻辑块示例1:混合怪物

这个例子介绍了怎样创建一个在平铺模式下随机显示怪物(或其它任何东西)图片的mashup。“调整它(Tweak It)”页面显示了用来创建这个mashup的每个块的mashup与setting。

image

如下是mashup:

image

这个mashup使用一个Timer块以半秒的间隔触发后面的块序列20秒。

计算块(Caculator)使用getRandomWholeNumber操作选择一个0到3之间的随机整数。

两个ConditionBuilder块使用那个值来构建使用LogicCondition操作检查这个值的条件。唯一可能的值是0,1或2。所以仅需两个条件块(来检查值为0还是1),如果值为3逻辑块将进入默认的流程。

逻辑块使用if2操作接收两个条件来检查这个值。用户输入每个值成为条件的一个结果,其描述了一个与随机数值一致的图片。

image

Live图片搜索块查找第一张描述为其由逻辑块接收的图片。最后,SimpleImage块接收一个图片的URL并显示它(使用指定的高和宽)。

Logic块示例2:北部/南部的州

这个mashup针对名称以”北部(North)”(北卡罗莱纳州和北达科他州(North Carolina and North

Dakota))开始的州显示一个上箭头,名称以单词South开始的州(South Carolina and South Dakota)上显示一个下箭头,其它州上显示一个星号。

image

如下是mashup:

image

此处的条件是专用的(”以North开始”或”以South开始”),一种相似的技术可以被用来基于其它值以红或黄色块或有色图钉来显示。参见练习,你将使用这种技术来显示一个在地图上展示当前汽油价格的mashup,基于每个州的汽油价格显示不同颜色的图钉。

image

过滤块示例:FacebookFriendsFilter

这个mashup使用Facebook块显示指定州中你的Facebook好友的信息。如果你要展示你Facebook好友的真实数据你需要获得一个developer key。如果你还没有key,点击需要你获取一个key的链接,根据说明得到一个key。

每个ConditionBuilder使用一个连接到Filter块的FilterCondition。

image

FaceBook块的getFriends操作(传入friends=0这个参数)返回所有你的Facebook好友的信息。

这个mashiup使用了两个FilterCondition:前者由账户信息中表示州的列返回所有州的列表,后者根据用户在用户输入块下拉列表选择的州来查找那些账户信息中匹配这个州的好友信息。

第一个ConditionBuilder使用FilterCondition – [x]不等于[](即值不为空)检查并确保州的值被提供了。(本例中比较值这个输入留空。)这步操作时必须的因为可能(且很可能)一些好友没有在他们Facebook账户信息中选择一个州。根据这个mashup的目的,这些好友不会被包含在内,因为他们没有指定他们的州,而这个mashup的过滤又是基于其所在的州。这里[x]值被用作比较值,因为过滤块中正在被过滤的列表是来自Facebook块的州的列表。

image

Bentley_TextTools块包含一个名为RemoveDuplicates的操作可以移除一个列表中的重复项。这个操作是必须的这样每个州才仅在用户输入块的下拉列表中出现一次。(不使用这个块,如果有两个来自马萨诸塞州的朋友,马萨诸塞州这个值将在下拉列表中出现两次。)移除重复的州创建一个唯一的州的列表,通过其来过滤Facebook好友。

顺便说,注意虽然当前的实现没有这么做,但你可以将过滤块的结果输出到排序块来将州按首字母顺序排序后显示在用户输入块的下拉列表中。

第二个ConditionBuilder块使用过滤条件[x.state][is equal to][output string]基于用户输入块下拉列表中选择的州的值来过滤整个Facebook对象。注意ConditionBuilder中使用的x.state指定了Facebook对象中一个单独的条目,过滤即按此值进行。

image

SimpleImage块创建下面的HTML代码来将好友的缩略图URL显示为一个图片,TableDisplay块在一个表格中显示每个好友的图片,姓名与州。每次你由下拉列表选择一个不同的州时,这些结果将被刷新。

image

合并条件:购买一个笔记本电脑

如果你想深钻逻辑操作符的使用,考虑这个例子,其展示怎样使用AND逻辑操作符来合并两个简单条件。

考虑你正寻找一台800美元以下的Sony笔记本电脑。你可以使用MSN购物块帮助你做出决定。

这个mashup使用MSN购物块搜索匹配这些条件的物品,并将商品的名称,价格,商品的URL及表示这个商品是否满足价格区间条件的单词YES或NO显示在一个表格中。

image

用户在用户输入块中输入品牌,产品,及打算支出的最大金额。

MSN购物块的getProducts操作被设置为查找符合指定品牌且开支小于指定最大可支出金额的30个商品的信息。用户输入块的默认值是搜索Sony笔记本电脑中价格小于或等于800美元的笔记本电脑。

第一个ConditionBuilder构建了检查品牌是否为Sony的条件。

第二个ConditionBuilder块检查判断价格是否小于或等于800美元。注意,由于这是一个数字间比较(价格是一个数字),stringComparison这个到LogicCondition操作的输入值应该被设置为false。

image

第三个ConditionBuilder块使用Combine2Conditions操作将两个ConditionBuilder生成的逻辑条件使用AND运算符合并。如果两个简单条件都为true,合并后条件的结果为true。逻辑块检查合并条件的结果,如果为true返回YES,否则为NO。

image

StevesTableWithHotFirstColumn显示商品的名称,价格,URL及当前商品是否满足为Sony牌并且花费小于或等于指定价格。

image

技术细节:比较字符与数字数据

如果你对了解更多关于JavaScript内部怎样处理字符与数字数据感兴趣请阅读这部分内容。Popfly块是用JavaScript编写的。一些数字数据(如邮政编码)的确应该被作为字符数据处理,即使这个值是由字符字母组成的字符串。

举个例子,见ProfessorPopfly的mashup – “ConditionBuilderNumericComparisonTest” (http://www.popfly.com/users/professorpopfly/ConditionBuilderNumericComparisonTest)。

这个mashup展示了字符串与数字比较的不同结果:

image

让我们创建一个包含下面这些值的列表:这个mashup查找大于或等于24的值。其中使用到FilterCondition操作,因为这个条件被连接到一个过滤块。

image

上方两个ConditionBuilder块中条件的唯一不同是左侧使用一个数字比较而右侧的使用字符串比较。每个块将比较条件发送到Filter,这个过滤块使用指定的条件过滤上方值的列表。当使用数字方式过滤值时,条件(x>=24)的结果为24与34。结果显示在用户输入栏的下拉列表中。

image

当使用字符串比较过滤值时,条件(x>=’24’)的结果为’24’,’3’,’34’与’4’。(注意使用单引号表示字符为字符串值。)字符串比较将列表中每个值与字符串’24’执行一个逐字符。字符串比较的顺序是按ASCII码这个已知的顺序,其给每一个数字、字母字符与计算机键盘上的符号一个独一无二的顺序。由于在ASCII顺序中3在2的后面(这是计算机表示字符”顺序”的模式),3被包含在列表中,因为字符’3’在字符’2’及所有2开头的字符串的前面,虽然数字上3<24。

你可能感兴趣的:(学习)