首页 前端知识 10天学会kotlin DAY9 高阶函数DSL 手撕HTML,sw实战营文件下载

10天学会kotlin DAY9 高阶函数DSL 手撕HTML,sw实战营文件下载

2024-05-24 08:05:41 前端知识 前端哥 347 244 我要收藏

open fun a(href: String, action: A.() -> Unit) {

val newA = A()

newA.href = href

newA.action()

elements += newA

}

}

// h1 中转站

private class H1 : Body(“h1”) {

}

// P 中转站

private class P : Body(“p”) {

fun b(action: B.() -> Unit) {

val newB = B()

newB.action()

elements += newB

}

override fun a(href: String, action: A.() -> Unit) {

val newA = A()

newA.href = href

newA.action()

elements += newA

}

fun ul(action: Ul.() -> Unit) {

val newUl = Ul()

newUl.action()

elements += newUl

}

}

// A 中转站

private class A : Body(“a”) {

var href: String

get() = attribute[“href”]!!

set(value) {

attribute[“href”] = value

}

}

// P 中转站

private class B : Body(“b”) {

}

// Ul 中转站

private class Ul : Body(“ul”) {

fun li(action: Li.() -> Unit) {

val newLi = Li()

newLi.action()

elements.add(newLi)

}

}

// Li 中转站

private class Li : Body(“li”) {}

// Title 中转站

private class Title : TagClass(“title”) {

}

private fun html(action: Html.() -> Unit): Html {

val html = Html()

html.action()

return html

}

fun main(args: Array) {

val names = listOf(“张三”, “大漂亮”, “王美丽”)

val result =

html { // this == 第一个中转站 { head body 。。 }

head { // this == head中转站 { title }

title { +“使用 Kotlin 进行 HTML 编码” }

}

body { // this == body中转站 { h1 p a p }

h1 { // this == h1中转站 { 未知 }

}

p { -“此格式可用作 HTML 的替代标记” }

// 具有属性和文本内容的元素

a(href = “https://blog.csdn.net/u010755471”) { -“不爱学习的猪的博客” }

// 混合内容

p {

-“Derry老师来了”

b { -“Derry是谁” }

-“文本。有关更多信息,请参阅”

a(href = “https://blog.csdn.net/u010755471”) { -“不爱学习的猪的博客” }

-“Derry的项目”

}

p { -“一些文字” }

// 从命令行参数生成的内容

p {

-“命令行参数是:”

ul { // this == UL中转站 { li 子标签 }

for (name in names)

li { -name } // this == LI中转站

}

}

}

}

println(result)

val file = File(“/Users/Documents/Android leaning work/kotlinleaning04/testHtml.html”)

file.writeText(result.toString())

}

二、使用 DSL 解析HTML

=============================================================================

先来张图

在这里插入图片描述

源码如下:

import java.io.File

// 定义一个节点接口

interface Node {

fun create(): String

}

// 中转站

class BlockNode(val name: String) : Node {

val children = ArrayList() // 节点集合: html head body

private val properties = hashMapOf<String, Any>() //属性集合:style=‘color: white; font-family: Microsoft YaHei’

override fun create(): String {

return “”“<$name KaTeX parse error: Expected '}', got 'EOF' at end of input: …perties.map { "{it.key}='KaTeX parse error: Expected 'EOF', got '}' at position 14: {it.value}'" }̲.joinToString("…{children.joinToString ( “” ){it.create()}}</$name”“”

}

operator fun String.invoke(action: BlockNode.() -> Unit){

val stringNode = BlockNode(this)

stringNode.action()

this@BlockNode.children += stringNode

}

operator fun String.invoke(value: Any){

this@BlockNode.properties[this] = value

}

operator fun String.unaryPlus(){

val stringNode = StringNode(“$this &sbsp; &sbsp;”)

this@BlockNode.children += stringNode

}

}

class StringNode(private val value: String) : Node {

override fun create(): String {

return value

}

}

fun html(action: BlockNode.() -> Unit): BlockNode {

val blockNode = BlockNode(“html”)

blockNode.action()

return blockNode

}

fun BlockNode.head(action: BlockNode.() -> Unit) {

val head = BlockNode(“head”)

head.action()

children += head

}

fun BlockNode.body(action: BlockNode.() -> Unit) {

val body = BlockNode(“body”)

body.action()

children += body

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

目前已经更新的部分资料:



一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-oIKYdOO0-1712591572467)]

最后

目前已经更新的部分资料:

[外链图片转存中…(img-V93vOwBi-1712591572467)]
[外链图片转存中…(img-MpagfXLH-1712591572467)]
[外链图片转存中…(img-gwvuQFwD-1712591572467)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-n2qZUzv5-1712591572468)]

转载请注明出处或者链接地址:https://www.qianduange.cn//article/9248.html
标签
kotlin
评论
发布的文章

用JS生成本周日期代码

2024-04-18 17:04:15

js 递归函数

2024-05-31 10:05:46

jQuery是什么?如何使用?

2024-03-12 01:03:24

js延迟加载的六种方式

2024-05-30 10:05:51

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!