{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pacotes de software\n", "\n", "Pacotes de software estendem as funções e comandos básicos da linguagem.\n", "O ecosistema da Julia contém mais de 7400 pacotes de software registrados e esse número continua crescendo.\n", "Com um número tão grande de pacotes, pode ser difícil encontrar o pacote desejado.\n", "Alguns serviços para ajudar a navegar nesse ecosistema são mencionados em https://julialang.org/packages.\n", "Em particular, podemos procurar pacotes de software usando https://juliahub.com/ui/Packages.\n", "\n", "Além dos pacotes de software, a Julia possui comandos robustos para evocar funções de outras linguagems e interagir com elas.\n", "Por exemplo, é simples chamar funções do Python ou do R usando os comandos `PyCall` ou `Rcall`.\n", "Dessa forma, você pode usar pacotes de outras linguagems em seus programas em Julia.\n", "\n", "Vejamos agora como usar um pacote de software. A primeira vez que você usa um pacote em uma instalação da Julia, você precisa usar o gerenciador de pacotes para instalá-lo:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Updating\u001b[22m\u001b[39m registry at `~/.julia/registries/General.toml`\n", "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n", "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n" ] } ], "source": [ "using Pkg\n", "Pkg.add(\"Example\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para carregar um pacote em uma sessão da Julia, usa-se a palavra-chave `using`.\n", "No comando acima, carregamos o pacote `Pkg` e depois usamos a função `add` do pacote `Pkg` para instalar o pacote `Example`.\n", "\n", "A seguir, carregamos o pacote `Example`:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "using Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "No código fonte de `Example.jl` em https://github.com/JuliaLang/Example.jl/blob/master/src/Example.jl, encontramos a declaração da função\n", "```\n", "hello(who::String) = \"Hello, $who\"\n", "```\n", "Logo, após carregarmos o pacote `Example`, podemos executar a função `hello`:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "\"Hello, Julia\"" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hello(\"Julia\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agora, vamos explorar o pacote `Colors`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[32m\u001b[1m Resolving\u001b[22m\u001b[39m package versions...\n", "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Project.toml`\n", "\u001b[32m\u001b[1m No Changes\u001b[22m\u001b[39m to `~/julia-breve-intro/Manifest.toml`\n" ] } ], "source": [ "Pkg.add(\"Colors\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "using Colors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vamos criar uma paleta com 100 cores diferentes." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "100-element Array{RGB{N0f8},1} with eltype RGB{FixedPointNumbers.N0f8}:\n", " RGB{N0f8}(0.0,0.0,0.0)\n", " RGB{N0f8}(1.0,1.0,0.455)\n", " RGB{N0f8}(1.0,0.608,1.0)\n", " RGB{N0f8}(0.0,0.827,1.0)\n", " RGB{N0f8}(0.886,0.388,0.051)\n", " RGB{N0f8}(0.0,0.494,0.0)\n", " RGB{N0f8}(0.0,0.314,0.902)\n", " RGB{N0f8}(0.675,0.0,0.278)\n", " RGB{N0f8}(0.0,1.0,0.784)\n", " RGB{N0f8}(0.0,0.392,0.408)\n", " RGB{N0f8}(1.0,0.835,0.769)\n", " RGB{N0f8}(0.424,0.322,0.0)\n", " RGB{N0f8}(0.478,0.459,0.506)\n", " ⋮\n", " RGB{N0f8}(0.0,0.557,0.58)\n", " RGB{N0f8}(0.792,0.675,0.318)\n", " RGB{N0f8}(0.471,0.482,0.231)\n", " RGB{N0f8}(0.714,0.976,0.851)\n", " RGB{N0f8}(0.855,0.0,0.247)\n", " RGB{N0f8}(0.18,0.129,0.141)\n", " RGB{N0f8}(0.0,0.345,0.082)\n", " RGB{N0f8}(1.0,0.557,0.114)\n", " RGB{N0f8}(0.4,0.455,0.694)\n", " RGB{N0f8}(0.0,0.804,0.678)\n", " RGB{N0f8}(0.0,0.498,0.388)\n", " RGB{N0f8}(0.6,0.435,0.239)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "paleta = distinguishable_colors(100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usando o comando `rand`, vamos criar uma matrix de cores 3x3." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma matrix 3x3 de números aleatorios entre 0 e 1:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3×3 Matrix{Float64}:\n", " 0.351109 0.614968 0.607372\n", " 0.826391 0.344926 0.768653\n", " 0.346904 0.709069 0.496766" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rand(3, 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma matrix 3x3 de números aleatórios em `1:10`:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3×3 Matrix{Int64}:\n", " 3 5 5\n", " 4 9 4\n", " 9 2 7" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rand(1:10, 3, 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma matrix 3x3 de cores aleatórias em `paleta`:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "3×3 Array{RGB{N0f8},2} with eltype RGB{FixedPointNumbers.N0f8}:\n", " RGB{N0f8}(0.267,0.267,0.224) … RGB{N0f8}(0.0,0.196,0.0)\n", " RGB{N0f8}(1.0,0.608,0.69) RGB{N0f8}(0.655,0.525,0.0)\n", " RGB{N0f8}(0.0,0.176,0.188) RGB{N0f8}(0.0,0.561,0.714)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rand(paleta, 3, 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nos comandos acima usando `rand` , o primeiro faz a seleção entre os números float de 0 a 1, o segundo entre os inteiros de 1 a 10, e o terceiro entre os elementos da paleta." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Procurando por `Colors` em https://juliahub.com/ui/Packages encontramos informações sobre esse pacote, incluindo links para a documentação e código fonte." ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.8.2", "language": "julia", "name": "julia-1.8" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.8.2" } }, "nbformat": 4, "nbformat_minor": 4 }