用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/personamanagmentlayer/pcl --skill kotlin-expert命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Expert in Persona Control Language (PCL) - language design, compiler architecture, runtime systems, and ecosystem development
Expert system for designing, creating, and validating PCL skills with comprehensive domain knowledge extraction
Expert-level Docker containerization, image optimization, and container orchestration. Use this skill for building efficient Docker images, managing containers, and implementing Docker best practices.
基于 SOC 职业分类
正在显示 SKILL.md
| name | kotlin-expert |
| version | 1.0.0 |
| description | Expert-level Kotlin development, Android, coroutines, and multiplatform |
| category | languages |
| tags | ["kotlin","android","coroutines","multiplatform","jvm"] |
| allowed-tools | ["Read","Write","Edit","Bash(kotlin:*, gradle:*)"] |
Expert guidance for Kotlin development, Android, coroutines, Kotlin Multiplatform, and modern JVM development.
// Data classes
data class User(
val id: String,
val name: String,
val email: String,
val createdAt: LocalDateTime = LocalDateTime.now()
)
// Sealed classes for type-safe states
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>()
}
// Extension functions
fun String.isValidEmail(): Boolean {
return this.contains("@") && this.contains(".")
}
// Scope functions
fun processUser(user: User) {
user.run {
println("Processing user: $name")
// 'this' refers to user
}
user.let { u ->
// 'it' or custom name refers to user
println(u.email)
}
user.apply {
// Modify properties
// Returns the object
}
}
: User? {
database.find(id)
}
user = findUser()
name = user?.name ?:
user?.let { println(it.name) }
: String = {
user.isActive && user.isPremium ->
user.isActive ->
->
}
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
class UserRepository {
private val api: UserApi
// Suspend function
suspend fun fetchUser(id: String): User {
return withContext(Dispatchers.IO) {
api.getUser(id)
}
}
// Flow for reactive streams
fun observeUsers(): Flow<List<User>> = flow {
while (true) {
val users = fetchUsers()
emit(users)
delay(5000) // Refresh every 5 seconds
}
}.flowOn(Dispatchers.IO)
// StateFlow for state management
private val _users = MutableStateFlow<List<User>>(emptyList())
val users: StateFlow<List<User>> = _users.asStateFlow()
suspend fun refreshUsers() {
_users.value = fetchUsers()
}
}
// Coroutine scopes
class UserViewModel : ViewModel() {
private val repository = UserRepository()
fun loadUsers() {
viewModelScope.launch {
try {
val users = repository.fetchUser("123")
} (e: Exception) {
}
}
}
: List<User> {
coroutineScope {
ids.map { id ->
async { repository.fetchUser(id) }
}.awaitAll()
}
}
: Flow<List<User>> {
repository.observeUsers()
.map { users -> users.filter { it.name.contains(query, ignoreCase = ) } }
.distinctUntilChanged()
.debounce()
}
}
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
@Composable
fun UserListScreen(viewModel: UserViewModel = viewModel()) {
val users by viewModel.users.collectAsState()
val isLoading by viewModel.isLoading.collectAsState()
Scaffold(
topBar = { TopAppBar(title = { Text("Users") }) }
) { padding ->
if (isLoading) {
CircularProgressIndicator(
modifier = Modifier.fillMaxSize()
)
} else {
LazyColumn(
modifier = Modifier.padding(padding)
) {
items(users) { user ->
UserCard(user = user)
}
}
}
}
}
@Composable
fun UserCard(user: User) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = user.name,
style = MaterialTheme.typography.headlineSmall
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyMedium
)
}
}
}
import androidx.room.*
import kotlinx.coroutines.flow.Flow
@Entity(tableName = "users")
data class UserEntity(
@PrimaryKey val id: String,
@ColumnInfo(name = "name") val name: String,
@ColumnInfo(name = "email") val email: String,
@ColumnInfo(name = "created_at") val createdAt: Long
)
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getAllUsers(): Flow<List<UserEntity>>
@Query("SELECT * FROM users WHERE id = :userId")
suspend fun getUserById(userId: String): UserEntity?
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertUser(user: UserEntity)
@Update
suspend fun updateUser(user: UserEntity)
@Delete
suspend fun
}
: () {
: UserDao
{
INSTANCE: AppDatabase? =
: AppDatabase {
INSTANCE ?: synchronized() {
instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::.java,
).build()
INSTANCE = instance
instance
}
}
}
}
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Provides
@Singleton
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.example.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
}
@Provides
@Singleton
fun provideUserApi(retrofit: Retrofit): UserApi {
return retrofit.create(UserApi::class.java)
}
}
@HiltAndroidApp
class MyApplication : Application()
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject lateinit var repository: UserRepository
}
// commonMain
expect class Platform() {
val name: String
}
expect fun platformSpecificFunction(): String
// androidMain
actual class Platform actual constructor() {
actual val name: String = "Android ${android.os.Build.VERSION.SDK_INT}"
}
actual fun platformSpecificFunction(): String = "Android implementation"
// iosMain
actual class Platform actual constructor() {
actual val name: String = UIDevice.currentDevice.systemName()
}
actual fun platformSpecificFunction(): String = "iOS implementation"
// Shared business logic
class UserService {
suspend fun fetchUser(id: String): User {
// Shared logic works on all platforms
return api.getUser(id)
}
}
❌ Using !! (non-null assertion) ❌ GlobalScope.launch ❌ Blocking main thread ❌ Not handling coroutine cancellation ❌ Tight coupling ❌ God classes ❌ Ignoring memory leaks